这一章的内容较少,有些知识需要在时间中掌握。这个实验,既是一次时间,也是学习内容。必须完成这个实验,才能继续向下学习。
将下面的程序编译连接,用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