|
主题 : : 汇编指令长度如何计算? [待解决] |
回复[ 6次 ]
点击[ 416次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-04-15 17:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25 |
比如:
一、没有操作数的指令,指令长度为1字节。如
es:
ds:
cbw
xlat
等。
二、操作数只涉及寄存器的指令,指令长度为2字节。如
mov al,[si]
mov ax,[bx+si]
mov ds,ax
等。
三、操作数涉及内存地址的指令,指令长度为3字节。如
mov al,[bx+1]
mov ax,[bx+si+3]
lea di,[1234]
mov [2345],ax
等。
以上什么意思(具体解释?)
谢谢!! | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-04-15 20:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
|
|
|
|
|
[第2楼]
[ 回复时间:2010-04-20 13:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25 |
回复:[第1楼]
------------------
我是在很认真的问诶 诶···^-^ | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-04-20 13:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-01 22:16 |
拿第三种举个例子,就是说指令 mov al,[bx+1] 在经过编译变成“机器码”之后,占3个字节。
在debug下很容易验证:
-a 0:200
0000:0200 mov al,[bx+1]
0000:0203
看到了吗,在0:200处写入上述指令,占用了0:200,0:201,0:202这三个单元,提示你要是再输入下条指令的话,从0:203处开始
-u 0:200
0000:0200 8A4701 MOV AL,[BX+01]
0000:0203 0000 ADD [BX+SI],AL
0000:0205 0000 ADD [BX+SI],AL
0000:0207 0000 ADD [BX+SI],AL
0000:0209 0000 ADD [BX+SI],AL
看看,MOV AL,[BX+01]变成机器码就是8A4701,占3个字节。
-q | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-04-23 21:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25 |
回复:[第3楼]
------------------
看到了吗,在0:200处写入上述指令,占用了0:200,0:201,0:202这三个单元,提示你要是再输入下条指令的话,从0:203处开始
____看到了!但原因是为什么,或者说0000:0200 mov al,[bx+1] 这条指令为什么是占用3个单元,而不是…? | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-04-24 18:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
你这个问题是指令设计的问题了,和硬件相关了,找本x86 opcode了解一下就可以了,不是重点 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-07-29 22:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22 |
很简单,写一个简单的程序,然后用debug调试一下,输入u命令后,你就会明白了。0000:0200 8A4701 MOV AL,[BX+01]
8A4701共3字节,明白了没? | | |