鱼C论坛

 找回密码
 立即注册
查看: 2435|回复: 0

[汇编作业] 实验5 编写、调试具有多个段的程序

[复制链接]
发表于 2014-6-25 21:31:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(1) 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。
  1. assume cs:code,ds:data,ss:stack

  2. data segment        
  3.         dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h        
  4. data ends;

  5. stack segment
  6.         dw 0,0,0,0,0,0,0,0
  7. stack ends

  8. code segment

  9. start:        mov ax,stack
  10.                 mov ss,ax
  11.                 mov sp,16
  12.                
  13.                 mov ax,data
  14.                 mov ds,ax
  15.                
  16.                 push ds:[0]
  17.                 push ds:[2]
  18.                 pop ds:[2]
  19.                 pop ds:[0]
  20.         
  21.                 mov ax,4c00h
  22.                 int 21h

  23. code ends

  24. end start
复制代码
a. CPU执行程序,程序返回前,data段中的数据为多少?
23 01 56 04 89 07 bc 0a-ef 0d ed 0f ba 0c 87 09
b. CPU执行程序,程序返回前,cs=076c、ss=076b、ds=076a。
c. 设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack的段地址为X-1。

(2) 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。
  1. assume cs:code,ds:data,ss:stack

  2. data segment        
  3.         dw 0123h,0456h
  4. data ends;

  5. stack segment
  6.         dw 0,0
  7. stack ends

  8. code segment

  9. start:        mov ax,stack
  10.                 mov ss,ax
  11.                 mov sp,16
  12.                
  13.                 mov ax,data
  14.                 mov ds,ax
  15.                
  16.                 push ds:[0]
  17.                 push ds:[2]
  18.                 pop ds:[2]
  19.                 pop ds:[0]
  20.         
  21.                 mov ax,4c00h
  22.                 int 21h

  23. code ends

  24. end start
复制代码
a. CPU执行程序,程序返回前,data段中的数据为多少?
23 01 56 04
b. CPU执行程序,程序返回前,cs=076c、ss=076b、ds=076a。
c. 设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack的段地址为X-1。
d. 对于如下定义的段:
name segment
   ...
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为((N-N%16)/16+1)*16个字节

(3) 将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。
  1. assume cs:code,ds:data,ss:stack

  2. code segment

  3. start:        mov ax,stack
  4.                 mov ss,ax
  5.                 mov sp,16
  6.                
  7.                 mov ax,data
  8.                 mov ds,ax
  9.                
  10.                 push ds:[0]
  11.                 push ds:[2]
  12.                 pop ds:[2]
  13.                 pop ds:[0]
  14.         
  15.                 mov ax,4c00h
  16.                 int 21h

  17. code ends

  18. data segment        
  19.         dw 0123h,0456h
  20. data ends

  21. stack segment
  22.         dw 0,0
  23. stack ends

  24. end start
复制代码
a. CPU执行程序,程序返回前,data段中的数据为多少?
23 01 56 04
b. CPU执行程序,程序返回前,cs=076a、ss=076e、ds=076d。
c. 设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack的段地址为X+4。
d. 如果将(1)、(2)、(3)题中的最后一条伪指令"end start"改为"end"(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因。
第(3)题,因为其加载后,cs:ip正好指向代码段。

(5) 程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中。
  1. assume cs:code

  2. a segment        
  3.         db 1,2,3,4,5,6,7,8
  4. a ends

  5. b segment
  6.         db 1,2,3,4,5,6,7,8
  7. b ends

  8. d segment
  9.         db 0,0,0,0,0,0,0,0
  10. d ends

  11. code segment
  12. start:        
  13.         mov ax,a
  14.         mov ds,ax

  15.         mov ax,b
  16.         mov es,ax

  17.         mov ax,d
  18.         mov ss,ax

  19.         mov cx,8
  20.         mov bx,0

  21.         s:mov al,[bx];
  22.         add al,es:[bx];
  23.         mov ss:[bx],al
  24.         inc bx
  25.         loop s

  26.         mov ax,4c00h
  27.         int 21h

  28. code ends

  29. end start
复制代码

(6) 程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。
  1. assume cs:code

  2. a segment        
  3.         dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
  4. a ends

  5. b segment
  6.         dw 0,0,0,0,0,0,0,0
  7. b ends

  8. code segment
  9. start:        
  10.         mov ax,a
  11.         mov ds,ax

  12.         mov ax,b
  13.         mov ss,ax
  14.         mov sp,16

  15.         mov cx,8
  16.         mov bx,0

  17. s:
  18.         push [bx]
  19.         add bx,2
  20.         loop s

  21.         mov ax,4c00h
  22.         int 21h

  23. code ends

  24. end start
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-6 09:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表