一、 将下面的程序编译连接,用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
(1) CPU执行程序,程序返回前,data段中的数据为多少?
code ends
end start
(1) CPU执行程序,程序返回前,data段中的数据为多少?
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
(2) CPU执行程序,程序返回前,CS=17F9、SS=17F8、DS=17F7。
(3) 设程序加载后,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
(1) CPU执行程序,程序返回前,data段中的数据为多少?
0123h,0456h,0,0,0,0,0,0
(2) CPU执行程序,程序返回前,CS=1849、SS=1848、DS=1847。
(3) 设程序加载后,code段的段地址为X,则data段的段地址为X-1,stack段的段地址为X-2。
(4) 对于如下定义的段:
name segment
……
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为:
如果N除以16余数为0,则size=N
如果N除以16为M余数不为0,则size=M ×16
三、将下面的程序编译连接,用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
(1) CPU执行程序,程序返回前,data段中的数据为多少?
0123h,0456h,0,0,0,0,0,0
(2) CPU执行程序,程序返回前,CS=17F7、SS=17FB、DS=17FA。
(3) 设程序加载后,code段的段地址为X,则data段的段地址为X+4,stack段的段地址为X+3。
四 如果将1、2、3题中的最后一条伪指令“end start”改为“end”,则哪个程序仍然可以正确执行?请说明原因。
第3个程序可以正确执行。因为它的代码段在最开始。
五 程序如下,编写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:
mov bx,0
mov cx,8
mov ax,c
mov es,ax
s:
mov ax,a
mov ds,ax
mov dl,[bx]
mov ax,b
mov ds,ax
add dl,[bx]
mov es:[bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
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:
mov bx,14
mov cx,8
mov ax,a
mov ss,ax
mov sp,0
mov ax,b
mov ds,ax
s:
pop [bx]
sub bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
- [martian] 程序没有问题, 11/08 19:46
- [游客] 呵呵,加油! 11/05 21:04
- [mouse] 这个没问题,原因是loop的操作。思考前面的jcxz 10/16 12:06
- [mouse] >mov cx,1 >mov cl,[bx] >jcxz ok ------------ 10/16 12:05
- [mouse] 这个程序的做法在实际编写程序中也很有用~ 10/16 12:04
- [mouse] 能自己看到结果,就不多说了^_^ 10/16 12:03
- [mouse] 答案都对 10/16 12:02
- [foamsand] 确实是错了。第二题的第三问应该是:设程序加载后,code段的段地址为X,则data段的段地址为X-2 10/05 16:50
- [tomato] 正确! 10/05 09:17
- [tomato] 正确! 10/05 09:15