汇编语言学习:实验五

这一章的内容较少,有些知识需要在时间中掌握。这个实验,既是一次时间,也是学习内容。必须完成这个实验,才能继续向下学习。

  • 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题:

assume cs:code,ds:data,ss:stack
data segment
    dw 0123H,0456H,0789H,0abcH,0defh,0fedh,0cbah,0987H
data ends
stack segment
    dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:  mov ax,stack
        mov ss,ax
        mov sp,16
        mov ax,data
        mov ds,ax
        push ds:[0]
        push ds:[2]
        pop ds:[2]
        pop ds:[0]
        mov ax,4c00h
        int 21h
code ends
end start
  • CPU执行程序,程序返回前,data段中的数据为多少?

  • 执行程序后,data段中的数据不变。

  • CPU执行程序,程序返回前,cs=0772H、ss=0771H、ds=0770H

  • 设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1

将下面的程序编译连接,用Debug加载、跟踪,然后回答问题:

assume cs:code,ds:data,ss:stack
data segment
    dw 0123H,0456H
data ends
stack segment
    dw 0,0
stack ends
code segment
start:  mov ax,stack
        mov ss,ax
        mov sp,16
        mov ax,data
        mov ds,ax
        push ds:[0]
        push ds:[2]
        pop ds:[2]
        pop ds:[0]
        mov ax,4c00h
        int 21h
code ends
end start
  • CPU执行程序,程序返回前,data段中的数据为多少?

  • 执行程序后,data段有16个字节空间,前两个字数据不变,其余为0.

  • CPU执行程序,程序返回前,cs=0772H、ss=0771H、ds=0771H

  • 设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1

  • 对于如下定义的段:

name segment
……
name ends

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为[N/16B]yte

 

将下面的程序编译连接,Debug加载、跟踪,然后回答问题:

assume cs:code,ds:data,ss:stack
code segment
start:  mov ax,stack
        mov ss,ax
        mov sp,16
        mov ax,data
        mov ds,ax
        push ds:[0]
        push ds:[2]
        pop ds:[2]
        pop ds:[0]
        mov ax,4c00h
        int 21h
code ends
data segment
    dw 0123H,0456H
data ends
stack segment
    dw 0,0
stack ends
end start
  • CPU执行程序,程序返回前,data段中的数据为多少?

  • data段数据不变。

  • CPU执行程序,程序放回前,cs=0070H、ss=0074H、ds=0073H

  • 设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4

如果将1、2、3题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因。

第三个程序,程序入口无数据段。

以下两题的源代码+exe程序: https://download.csdn.net/download/qq_29962483/11632965

  • 程序如下,编写code段中的代码,将a段和b段的数据一次相加,将结果存到c段中。

assume cs:code
a segment
    db 1,2,3,4,5,6,7,8
a ends
b segment
    db 1,2,3,4,5,6,7,8
b ends
c segment
    db 0,0,0,0,0,0,0,0
c ends
code segment
start:
        ?
code ends
end start
  • 程序如下,编写code段中的代码,用push指令将a段中的word数据,逆序存储到b段中。

assume cs:code
a segment
    dw 1,2,3,4,5,6,7,8
a ends
b segment
    dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
        ?
code ends
end start

 

你可能感兴趣的:(汇编语言学习)