精華區beta ASM 關於我們 聯絡資訊
.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
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)
loveflames:small就是指code段佔64kb了,為什麼還要use16? 12/15 20:51
wowtiger:.model 指的是 memory 狀態, use16 指的是 register 狀態 12/15 21:16
wowtiger:也就是 prefix 67h 和 prefix 66h 這兩種的狀態 12/15 21:19