爆火大侠 发表于 2013-2-5 16:48:22

不同汇编指令占字节大小多少?

近来发现王爽汇编实验4的第(3)题需要计算指令大小,有没有不用debug就可以快速算出不同汇编指令所占字节多少?

メ㊣逆ご帅☆ 发表于 2013-2-5 16:48:23

本帖最后由 メ㊣逆ご帅☆ 于 2013-2-5 19:30 编辑

想精确计算就看INTEL手册吧
这里只是笨方法
一般指令比较好计算,比较偏的指令我们一般不计算
就拿一般讲(只讲16位,32位差不多)
不同硬件架构指令字节数是不同的,这里拿X86来讲

首先乱写(没有实际意义,做实验而已)一段代码做测试

下面这段废话看几个特例就可以了



assume cs:code

code segment
start: inc ax
mov ax,1
mov ax,0FFFFh
mov ax,bx
;push 1 不知道为什么16位好像不允许PUSH立即数
push bx
nop
jmp s0
nop
nop
s0: jmp s1
nop
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
mov ax,1
s1: mov ax,1


mov ax,4c00h
int 21h
code ends
end start

我们在DEBUG用-u看指令(用DEBUG只是进行推导或猜测以便我们以后不用DEBUG都能知道字节数)
首先INC ax
inc指令都是占1个字节


mov ax,1    3个字节



注意:mov 这个指令占一个字节
这里用立即数来赋值,立即数占字节较多 占2个字节(固定的,通过mov ax,0ffffh可以验证)
所以占3个字节
注意同mov ax,bx这种两个都是寄存器的进行比较

mov ax,bx2个字节



对于这种mov操作 两个操作数都是寄存器的直接确定2个字节

push bx(push 固定一个字节)





jmp s0 两个字节




这个JMP占一个字节,后面看位移多大,一个字节装不下位移就两个字节,类推

jmp s0 跳的比较近

后面的位移1个字节就搞定了


后面jmp s13个字节



跳的比较远
jmp占1个字节
位移一个字节装不下,所以用两个字节装下了








都是猜测,不一定正确,其他指令用这种方法也可以猜出来规律吧
靠累积吧
也不常用







七月之变 发表于 2013-2-5 19:27:40

不用Debug的话貌似不好弄。。。
你就用Debug吧?用了又有什么呢?如果你对花指令熟悉的话也许对指令的大小比较敏感,否则这个可以忽略的。。。

bafengao 发表于 2013-2-5 20:03:27

好好学习 汇编语言

yincooujiao 发表于 2015-6-12 15:42:24

建议用DOS的DEBUG调试查看下,INC占用1个字节长,loop占用2个字节,张爽编程书上习题是17个字节

fast 发表于 2015-6-20 03:26:55

建议用DOS的DEBUG调试查看下,INC占用1个字节长,loop占用2个字节,张爽编程书上习题是17个字节
王爽,不是张爽
页: [1]
查看完整版本: 不同汇编指令占字节大小多少?