注册 登录
编程论坛 汇编论坛

怎么区别8086cpu中那些是指令,那些是伪指令。

anonymous_01 发布于 2021-02-27 10:54, 5817 次点击

不是说dw是伪指令吗?为什么不通过编译器能执行,并且我在debug模式中也没有使用t来执行语句,但该语句就被执行了。

[此贴子已经被作者于2021-2-27 10:56编辑过]

3 回复
#2
Valenciax2021-02-28 06:27
db,dw,dd,dq,dt等都是编译器(如masm)的定义内存长度的伪指令,dw是定义字word,
dw xx,yy,zz..... ;xx,yy,zz等代表一个word,其含义可以是指令,立即值,地址等等任何cpu解释的意义
通常dw指向一个值,再由指令去读取,如
table dw 1000h,2000h,3000h
..
..
mov bx,offset table    ;取址
mov ax,[bx]         ;取址中值,ax=1000h
mov ax,[bx+2]         ;取址中值,ax=2000h

但,dw也可以直接在程式段使用,如

mov bx,1000h
dw 0d889h
dw 9090h

编译器会将后2条的dw值放置在该地址,cpu会直接执行(当然必须有意义的指令)
mov bx,1000h
mov ax,bx    ;89h,0d8h 是 mov ax,bx的机器码
nop        ;90h 是 nop的机器码
nop

所以dw本身尽管不是指令,但可以定义出机器码,
但若是cpu无法解释的东西,后果无法预期.
#3
asd1911557072021-04-17 12:31
8888888888888888
#4
自由而无用2021-08-09 19:47
null

[此贴子已经被作者于2021-11-4 18:16编辑过]

1