鱼C论坛

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

[学习笔记] 实验五

[复制链接]
发表于 2017-9-8 22:45:23 | 显示全部楼层 |阅读模式

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

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

x
(1)代码:
  1. assume cs : code, ds : data, ss : stack

  2. data segment

  3.         dw 0123H, 0456H, 0789h, 0abcH, 0defH, 0fedH, 0cbaH, 0987H
  4.        
  5. data ends

  6. stack segment

  7.         dw 0, 0, 0, 0, 0, 0, 0, 0
  8.        
  9. stack ends

  10. code segment

  11. start : mov ax, stack
  12.                 mov ss, ax
  13.                 mov sp, 16
  14.                
  15.                 mov ax, data
  16.                 mov ds, ax
  17.                
  18.                 mov bx, 0
  19.                
  20.                 push ds: [0]
  21.                 push ds: [2]
  22.                 pop ds: [2]
  23.                 pop ds: [0]
  24.                
  25.                 mov ax, 4c00H
  26.                 int 21H
  27.        
  28. code ends
  29. end start
复制代码


data段中的数据不会改变
cs、ss、ds中的内容视不同的电脑不同的操作系统而不同
如果code段的地址为X,则data段中的地址为X-2, stack段中的地址为X-1。

(2)代码:
  1. assume cs : code, ds : data, ss : stack

  2. data segment

  3.         dw 0123H, 0456H
  4.        
  5. data ends

  6. stack segment

  7.         dw 0, 0
  8.        
  9. stack ends

  10. code segment

  11. start : mov ax, stack
  12.                 mov ss, ax
  13.                 mov sp, 16
  14.                
  15.                 mov ax, data
  16.                 mov ds, ax
  17.                
  18.                 mov bx, 0
  19.                
  20.                 push ds: [0]
  21.                 push ds: [2]
  22.                 pop ds: [2]
  23.                 pop ds: [0]
  24.                
  25.                 mov ax, 4c00H
  26.                 int 21H
  27.        
  28. code ends
  29. end start
复制代码


前三个问题跟(1)的答案一样
第四个问题的答案是16 * (N / 16 + 1),如果一个段中的数据不同16个字节他/它会补完16个字节

(3)代码:
  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.                 mov bx, 0
  11.                
  12.                 push ds: [0]
  13.                 push ds: [2]
  14.                 pop ds: [2]
  15.                 pop ds: [0]
  16.                
  17.                 mov ax, 4c00H
  18.                 int 21H
  19.                

  20. code ends

  21. data segment

  22.         dw 0123H, 0456H
  23.        
  24. data ends

  25. stack segment

  26.         dw 0, 0
  27.        
  28. stack ends

  29. end start
复制代码


data段中的数据不会改变
cs、ss、ds中的内容视不同的电脑不同的操作系统而不同
如果code段中的地址为X,则data段中的段地址为X + 3, stack段的段地址为X + 4

(4)   第(3)程序可以正常执行,因为编译器是从上而下来编译的

(5)代码:
  1. assume cs : code

  2. a segment

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

  6. b segment

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

  10. c segment

  11.         db 0, 0, 0, 0, 0, 0, 0, 0
  12.        
  13. c ends

  14. code segment

  15. start : mov ax, a
  16.                 mov ds, ax
  17.                
  18.                 mov ax, c
  19.                 mov es, ax
  20.                
  21.                 mov bx, 0
  22.                 mov cx, 8
  23.                
  24.         s : mov al, [bx]
  25.                 add es:[bx], al
  26.                 inc bx
  27.                
  28.                 loop s
  29.                
  30.                 mov ax, b
  31.                 mov ds, ax
  32.                
  33.                 mov al, 0
  34.                 mov bx, 0
  35.                 mov cx, 8
  36.         s0: mov al, [bx]
  37.                 add es:[bx], al
  38.                 inc bx
  39.                
  40.                 loop s0
  41.                
  42.                 mov ax, 4c00H
  43.                 int 21H
  44.                
  45. code ends
  46. end start
复制代码


实现了将a和b段的数据相加到c段中

(6)代码:
  1. assume cs : code

  2. a segment

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

  6. b segment

  7.         dw 0, 0, 0, 0, 0, 0, 0, 0
  8.        
  9. b ends

  10. code segment

  11. start : mov ax, b
  12.                 mov ss, ax
  13.                 mov sp, 16
  14.                
  15.                 mov ax, a
  16.                 mov ds, ax
  17.                
  18.                 mov bx, 0
  19.                 mov cx, 8
  20.                
  21.         s : push [bx]
  22.                 add bx, 2
  23.                
  24.                 loop s
  25.                
  26.                 mov ax, 4c00H
  27.                 int 21H
  28.                
  29. code ends
  30. end start
复制代码


实现将a段的数据逆序放在b段中。

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 15:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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