为什么是3二不是2?菜鸟求大神帮助!
本帖最后由 天赐雨 于 2014-5-30 19:01 编辑assume cs:codesg
codesg segment
start:mov ax, offset start
s:mov ax,offset s ;这里为什么说相当于move ax 3 而不是move ax 2呢? 为啥是第一条指令是3个字节的机器码?
codesg ends
end start
本帖最后由 kikiatw 于 2014-5-30 20:24 编辑
因為MOV 機械碼佔用三個字節, 所以START那一行是 0,1,2 共三個
S那一行是 3. 4 5 三個, 所以offset s 是代表第3個.
mov 佔用三個機械碼 小甲魚已經多次提到了, 為什麼占用三個呢?這問題就不用糾結了, 編譯器就是這樣編的, 這種問題就像是為什麼1+1 = 2 一樣
編譯器規定就是規定, 除非你想研究機械碼, 機械碼沒啥好研究的, 先把匯編搞清楚吧!!
請給分, 感謝!!
kikiatw 发表于 2014-5-30 18:50 static/image/common/back.gif
因為MOV 機械碼佔用三個字節, 所以START那一行是 0,1,2 共三個
S那一行是 3. 4 5 三個, 所以offset s 是代 ...
感谢!那哪些是三个字节,哪些是2个字节或者其他,有说明么? 天赐雨 发表于 2014-5-30 21:38 static/image/common/back.gif
感谢!那哪些是三个字节,哪些是2个字节或者其他,有说明么?
我看到有些mov指令是2个字节,有的MOV指令是3个字节这个又是为啥呢? mov 一個立即值到寄存器就是3個
mov 寄存器到寄存器就是2個
編譯出來的機械碼真的不用去糾結, 不然你學起來會很痛苦的,
後面有些例題是要你算跳到幾個指令以後, 像這種問題你只要自己照個寫一次
然後用debug看看是要跳到哪就好了, 真的不用去管它幾個字節 offset代表偏移,偏移地址占2个字节,在加上MOV指令的操作码的字节数就是三个字节.
楼主先不要纠结机器码,这里面学问挺多的,都是一个工程师设计的,想楼上说的先把汇编学好. 董登辉 发表于 2014-6-1 09:13 static/image/common/back.gif
offset代表偏移,偏移地址占2个字节,在加上MOV指令的操作码的字节数就是三个字节.
楼主先不要纠结机器码,这 ...
哦,好!能弄清就弄清,不纠结了!(*^__^*)
页:
[1]