汇编网首页登录博客注册
foamsand的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
文章收藏
友情链接

[2008-10-02 19:32] 实验5 编写、调试具有多个段的程序

一、 将下面的程序编译连接,用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
评论次数(2)  |  浏览次数(612)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2008-10-05 08:59  ]

第二题的第三问是不是写错了?

[  foamsand   发表于  2008-10-05 16:50  ]

确实是错了。第二题的第三问应该是:设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码