請問 mov ax,【1】和mov ax,1這兩條指令合法嗎
uj5u.com熱心網友回復:
mov ax, [1] 吧,都是對的。不過,mov ax, [1] 對 masm 來說,等同于 mov ax, 1 所以源程式里得寫成 mov ax, ds:[1] 才會吧 1 解釋為記憶體地址而非立即數。
uj5u.com熱心網友回復:
mov ax,[1]等同于mov ax,1么 好像不對吧uj5u.com熱心網友回復:
[n]表示一個偏移定址uj5u.com熱心網友回復:
這在通常的想法上,確是是的;不過,你拿 masm5/6/32v?? 來編譯下,就會發現 masm 的理解異于尋常了。uj5u.com熱心網友回復:
MOV AX,[1] 的寫法意思是直接記憶體尋址,[]里面是放記憶體(偏移)地址的。但是不知道什么原因,MASM編譯軟體會將其識別成MOV AX,1
也就是說,書上可能說DS這個基址可以省略,但軟體不這么認為,軟體不允許省略,即:
軟體里MOV AX, DS:[1]才是書上的直接記憶體尋址。所以寫程式要用到直接尋址方式的話,記得加上基址咯。
至于MOV AX,1就正常的立即數傳送。
總結:MOV AX,[1] 和 MOV AX,1 在書上和軟體里都是合法的;
書上分別是:直接尋址 和 立即數傳送
軟體分別是:(轉為)立即數傳送 和 立即數傳送
uj5u.com熱心網友回復:
因為masm的設計者不想讓用戶經常使用絕對地址訪問,就故意把mov ax, [1]解釋成mov ax, 1masm中有很多這種怪癖,比如不讓顯式使用基于rip的尋址,諸如mov rax, [rip+xxx]這種指令,但是資料訪問指令,比如mov rax, var (var是一個變數),masm卻會隱含生成mov rax, [rip+xxx]; (xxx是當前rip到var的偏移量)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/129620.html
標籤:匯編語言
上一篇:DRF框架中多對多關聯欄位保存many-to-many
下一篇:求助:python找不到檔案
