鱼C论坛

 找回密码
 立即注册
查看: 3581|回复: 6

[争议讨论] 汇编问题7.9

[复制链接]
发表于 2012-4-21 17:33:20 | 显示全部楼层 |阅读模式
1鱼币
code segment
start:  mov ax,stack
  mov ss,ax
  mov sp,16
  
  mov ax,data
  mov ds,ax
  
  mov bx,0         ;定义行
  mov cx,4
s:  push cx
  mov si,0         ;定义列
  mov cx,4
s0: mov al,[bx+3+si]
  and al,11011111b
  mov [bx+3+si],al
  inc si
  loop s0
  
  add bx,16
  pop cx
  loop s
  mov ax,4c00h
  int 21h
code ends
end start

这段程序中,里面这个[bx+3+si]这样写在编译的时候出错了,改成[bx+si+3]或者3[bx][si]就不会出错,各位有出现这个问题吗

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-22 08:18:57 | 显示全部楼层
应该不是你说的这个问题
你要注意 si 和 di 是不能够分成两个8位寄存器的,也就是说它们所传递对应的应该是al,ah,bl,bh这样的8位寄存器,就算是配合bx进行灵活寻址,也需要对应16位以上的寄存器,反之应该是ax,bx这样的16位寄存器!所以你仔细看一下 王爽汇编 179页 对于 si和di的讲解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-22 10:01:08 | 显示全部楼层
[bx+3+si]语法错误不能这么写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-23 11:53:45 | 显示全部楼层
[bx+3+si] 书本上介绍说这样写也是可以的,但是编译错误,难道是书本写错了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-23 12:04:24 | 显示全部楼层
    梦想与现实,我想你说错了,所谓的si,di不能拆成两个8位寄存器,是说他不能像ax,bx那样能拆成al,ah,bl,bh。。所以不能够这样写:mov al,[si];应该要这样写才对:mov ax,[si]。。
    就算是配合bx进行灵活寻址,对应多少位的寄存器,应该传递的就是多少位的数据,如mov ax,[si]就是16位数据,mov al [si]就是8为数据。
这是我的理解,希望大伙能讨论讨论:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-4 16:46:48 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-4 16:57:00 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 23:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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