主题:为什么赋值也会出错
yaksha
[专家分:0] 发布于 2006-09-19 20:39:00
我编写一个很简单的程序也就是指定 段值和偏移
在屏幕上显示 指定地址的 内容。
当我用 les si ,a * a是 DD 变量 *
mov ax,es:[si]
调试程序的时候就会出错 提示: CPU error: incorrect opcode
当程序改成 mov al,es:[si]
调试则没有问题 ,请问为什么啊?
回复列表 (共5个回复)
沙发
liangbch [专家分:1270] 发布于 2006-09-21 13:45:00
dd 型变量占4个字节,
dw 型变量占2个字节
db 型变量占1个字节
如果是db型变量,可这样写
mov al,byte ptr es:[si]
如果是dw型变量,可这样写
mov ax,word ptr es:[si]
如果是dd型变量,可这样写
mov eax, dword ptr es:[esi] (32位汇编)
板凳
yaksha [专家分:0] 发布于 2006-09-24 19:10:00
晕,默认是应该不会出错的。
3 楼
救世猪猪 [专家分:560] 发布于 2006-10-04 15:51:00
这个还不太清楚
关注……
4 楼
oppenheimar [专家分:0] 发布于 2006-10-18 07:15:00
长度不一样啊
mov要求长度一致啊
而且在指针之前要使用
ptr
5 楼
救世猪猪 [专家分:560] 发布于 2006-10-18 22:13:00
终于明白了
你用mov ax,es:[si]的时候,系统不知道向ax中移入几个字节
如果你改成mov ax,word ptr es:[si]应该就可以了
而用mov al,es:[si]的时候,就能确定是向al中移入一个字节
我来回复