不同汇编指令占字节大小多少?
近来发现王爽汇编实验4的第(3)题需要计算指令大小,有没有不用debug就可以快速算出不同汇编指令所占字节多少? 本帖最后由 メ㊣逆ご帅☆ 于 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个字节
位移一个字节装不下,所以用两个字节装下了
都是猜测,不一定正确,其他指令用这种方法也可以猜出来规律吧
靠累积吧
也不常用
不用Debug的话貌似不好弄。。。
你就用Debug吧?用了又有什么呢?如果你对花指令熟悉的话也许对指令的大小比较敏感,否则这个可以忽略的。。。 好好学习 汇编语言 建议用DOS的DEBUG调试查看下,INC占用1个字节长,loop占用2个字节,张爽编程书上习题是17个字节 建议用DOS的DEBUG调试查看下,INC占用1个字节长,loop占用2个字节,张爽编程书上习题是17个字节
王爽,不是张爽
页:
[1]