鱼C论坛

 找回密码
 立即注册
查看: 4000|回复: 5

[汇编作业] 实验4 [bx]和loop的使用

[复制链接]
发表于 2020-3-22 14:29:00 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 流风逸雪 于 2020-3-22 14:33 编辑

(1)
  1. assume cs:codesg
  2. codesg segment
  3.         mov ax,0FFFFH
  4.         mov ds,ax
  5.         mov ax,0020h
  6.         mov es,ax
  7.         mov cx,63
  8. s:        mov es:[cx],cl
  9.         loop s
  10.        
  11.        
  12.         mov ax,4c00H
  13.         int 21h
  14. codesg ends
  15. end
复制代码

想要偷懒,结果第八行编译出错
于是
  1. assume cs:codesg
  2. codesg segment
  3.         mov ax,0FFFFH
  4.         mov ds,ax
  5.         mov ax,0020h
  6.         mov es,ax
  7.         mov cx,63
  8. s:        mov bx,cx
  9.         mov es:[bx],cl
  10.         loop s
  11.        
  12.        
  13.         mov ax,4c00H
  14.         int 21h
  15. codesg ends
  16. end
复制代码

编译成功,以上可以说体现了bx与cx的区别以及各自的意义
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-22 15:46:13 | 显示全部楼层
不过好像前两行没用来着。。。去掉前两行也通过编译了
  1. assume cs:codesg
  2. codesg segment
  3.         mov ax,0020h
  4.         mov es,ax
  5.         mov cx,63
  6. s:        mov bx,cx
  7.         mov es:[bx],cl
  8.         loop s
  9.        
  10.        
  11.         mov ax,4c00H
  12.         int 21h
  13. codesg ends
  14. end
复制代码

结果还是一样的
(2)
第二题让我用九行,结果我第一题就只用了8行.......就不重复贴代码了
(3)
先直接照着书上打,以得知程序存放的位置082e:0
而mov ax, 这个空格内容编译后会编译为0
-u 082e:0 之后得知mov ax,4c00h之前为0018h(24)个字节//虽然显示为0016h这一行,但事实上程序是从零开始的
我又想偷懒,直接 mov ax,ss来定位程序位置
  1. assume cs:codesg
  2. codesg segment
  3.         mov ax,ss
  4.         mov ds,ax
  5.         mov ax,0020h
  6.         mov es,ax
  7.         mov bx,0
  8.         mov cx,0016h
  9. s:        mov al,[bx]
  10.         mov es:[bx],al
  11.         inc bx
  12.         loop s
  13.        
  14.        
  15.         mov ax,4c00H
  16.         int 21h
  17. codesg ends
  18. end
复制代码

结果程序是在082e:0 ,而不是ss指向的082d:0
所以还是老老实实:
  1. assume cs:codesg
  2. codesg segment
  3.         mov ax,082eh
  4.         mov ds,ax
  5.         mov ax,0018h
  6.         mov es,ax
  7.         mov bx,0
  8.         mov cx,0016h
  9. s:        mov al,[bx]
  10.         mov es:[bx],al
  11.         inc bx
  12.         loop s
  13.        
  14.        
  15.         mov ax,4c00H
  16.         int 21h
  17. codesg ends
  18. end
复制代码

编译成功,结果也很完美
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-5 14:36:40 | 显示全部楼层
(1)的第一种为什么编译会不通过呢,求解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 22:10:47 | 显示全部楼层
朔风刀 发表于 2020-5-5 14:36
(1)的第一种为什么编译会不通过呢,求解答

因为 es:[xx] 里面,xx只能是bx寄存器,所以报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 22:28:56 | 显示全部楼层
流风逸雪 发表于 2020-3-22 15:46
不过好像前两行没用来着。。。去掉前两行也通过编译了

结果还是一样的

mov ax, cs 不就知道在哪儿开始了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-23 15:11:25 | 显示全部楼层
朔风刀 发表于 2020-5-5 14:36
(1)的第一种为什么编译会不通过呢,求解答

你要复制它的第二个,不然跟它一样第八行报错。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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