鱼C论坛

 找回密码
 立即注册
查看: 16620|回复: 5

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

[复制链接]
发表于 2013-2-5 16:48:22 | 显示全部楼层 |阅读模式
1鱼币
近来发现王爽汇编实验4的第(3)题需要计算指令大小,有没有不用debug就可以快速算出不同汇编指令所占字节多少?

最佳答案

查看完整内容

想精确计算就看INTEL手册吧 这里只是笨方法 一般指令比较好计算,比较偏的指令我们一般不计算 就拿一般讲(只讲16位,32位差不多) 不同硬件架构指令字节数是不同的,这里拿X86来讲 首先乱写(没有实际意义,做实验而已)一段代码做测试 下面这段废话看几个特例就可以了 我们在DEBUG用-u看指令(用DEBUG只是进行推导或猜测以便我们以后不用DEBUG都能知道字节数) 首先INC ax inc指令都是占1个字节 mov ax,1 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-2-5 16:48:23 | 显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2013-2-5 19:30 编辑

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

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

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



  1. assume cs:code

  2. code segment
  3. start: inc ax
  4. mov ax,1
  5. mov ax,0FFFFh
  6. mov ax,bx
  7. ;push 1 不知道为什么16位好像不允许PUSH立即数
  8. push bx
  9. nop
  10. jmp s0
  11. nop
  12. nop
  13. s0: jmp s1
  14. nop
  15. mov ax,1
  16. mov ax,1
  17. mov ax,1
  18. mov ax,1
  19. mov ax,1
  20. mov ax,1
  21. mov ax,1
  22. mov ax,1
  23. mov ax,1
  24. mov ax,1
  25. mov ax,1
  26. mov ax,1
  27. mov ax,1
  28. mov ax,1
  29. mov ax,1
  30. mov ax,1
  31. mov ax,1
  32. mov ax,1
  33. mov ax,1
  34. mov ax,1
  35. mov ax,1
  36. mov ax,1
  37. mov ax,1
  38. mov ax,1
  39. mov ax,1
  40. mov ax,1
  41. mov ax,1
  42. mov ax,1
  43. mov ax,1
  44. mov ax,1
  45. mov ax,1
  46. mov ax,1
  47. mov ax,1
  48. mov ax,1
  49. mov ax,1
  50. mov ax,1
  51. mov ax,1
  52. mov ax,1
  53. mov ax,1
  54. mov ax,1
  55. mov ax,1
  56. mov ax,1
  57. mov ax,1
  58. mov ax,1
  59. mov ax,1
  60. mov ax,1
  61. mov ax,1
  62. mov ax,1
  63. mov ax,1
  64. mov ax,1
  65. mov ax,1
  66. mov ax,1
  67. mov ax,1
  68. s1: mov ax,1


  69. mov ax,4c00h
  70. int 21h
  71. code ends
  72. 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,bx  2个字节



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

push bx(push 固定一个字节)





jmp s0 两个字节




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

jmp s0 跳的比较近

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


后面jmp s1  3个字节



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








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







想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-5 19:27:40 | 显示全部楼层
不用Debug的话貌似不好弄。。。
你就用Debug吧?用了又有什么呢?如果你对花指令熟悉的话也许对指令的大小比较敏感,否则这个可以忽略的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-5 20:03:27 | 显示全部楼层
好好学习 汇编语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-12 15:42:24 | 显示全部楼层
建议用DOS的DEBUG调试查看下,INC占用1个字节长,loop占用2个字节,张爽编程书上习题是17个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-20 03:26:55 | 显示全部楼层
建议用DOS的DEBUG调试查看下,INC占用1个字节长,loop占用2个字节,张爽编程书上习题是17个字节
王爽,不是张爽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-23 16:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表