作者wowtiger (小虎)
看板ASM
標題Re: [問題] about eax
時間Sat Dec 15 10:42:34 2007
.286
.model small
.code
start:
;mov eax,12345678h
db 066h
db 0B8h
dd 012345678h
mov dl,'d'
mov ah,06h
int 21h
mov ah,4ch
int 21h
end start
0001:0000: 66 B8 78 56 34 12 mov eax,12345678h
0001:0006: B2 64 mov dl,64h
0001:0008: B4 06 mov ah,6
0001:000A: CD 21 int 21h
0001:000C: B4 4C mov ah,4Ch
0001:000E: CD 21 int 21h
prefix 66h 就是這樣子
AMD64也是多一個prefix 變成 64bits
不然AMD64平常還是32bits
※ 引述《twwo (Jack)》之銘言:
: 有個問題想請問一下各位高手,
: 我想把12345678放進eax暫存器,程式碼如下
: .386
: .model small
: .stack
: .data
: .code
: start:
: mov eax,12345678h
: mov dl,'d'
: mov ah,06h
: int 21h
: mov ah,4ch
: int 21h
: end start
: 可是卻不如預期,反組譯結果如下
: 2902:0000 B87856 MOV AX,5678h
: 2902:0003 3412 XOR AL,12h
: 2902:0005 B264 MOV DL,64h
: 2902:0007 B406 MOV AH,06h
: 2902:0009 CD21 INT 21h
: 2902:000B B44C MOV AH,4Ch
: 2902:000D CD21 INT 21h
: 也就是說,組譯出來的執行檔只是把5678放進ax,
: 而不是我預期的把12345678放進eax,
: 怎麼會這樣呢?
: 我的masm是6.11版的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.125.195.189
1F:推 loveflames:這樣寫變成在寫machine code了 12/15 14:00
.386
.model small
code segment use16
mov eax,12345678h
mov dl,'d'
mov ah,06h
int 21h
mov ah,4ch
int 21h
code ends
end
這樣就不像machine code了吧 XD
※ 編輯: wowtiger 來自: 122.125.195.189 (12/15 17:41)
2F:推 loveflames:small就是指code段佔64kb了,為什麼還要use16? 12/15 20:51
3F:→ wowtiger:.model 指的是 memory 狀態, use16 指的是 register 狀態 12/15 21:16
4F:→ wowtiger:也就是 prefix 67h 和 prefix 66h 這兩種的狀態 12/15 21:19
5F:推 loveflames:代表這個段是16-bit區段? 12/15 22:57