回 帖 发 新 帖 刷新版面

主题:为什么赋值也会出错

我编写一个很简单的程序也就是指定  段值和偏移

在屏幕上显示 指定地址的 内容。
  
  当我用  les si ,a   * a是 DD 变量 *
          mov ax,es:[si] 
调试程序的时候就会出错   提示: CPU error: incorrect opcode
     当程序改成 mov al,es:[si]
调试则没有问题 ,请问为什么啊?

回复列表 (共5个回复)

沙发

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位汇编)

板凳

晕,默认是应该不会出错的。

3 楼

这个还不太清楚
关注……

4 楼

长度不一样啊
mov要求长度一致啊
而且在指针之前要使用
ptr

5 楼

终于明白了

你用mov ax,es:[si]的时候,系统不知道向ax中移入几个字节
如果你改成mov ax,word ptr es:[si]应该就可以了
而用mov al,es:[si]的时候,就能确定是向al中移入一个字节

我来回复

您尚未登录,请登录后再回复。点此登录或注册