Re: [問題] about eax

看板ASM (組合語言)作者 (小虎)時間17年前 (2007/12/15 10:42), 編輯推噓3(302)
留言5則, 2人參與, 最新討論串2/3 (看更多)
.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

12/15 14:00, , 1F
這樣寫變成在寫machine code了
12/15 14:00, 1F
.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)

12/15 20:51, , 2F
small就是指code段佔64kb了,為什麼還要use16?
12/15 20:51, 2F

12/15 21:16, , 3F
.model 指的是 memory 狀態, use16 指的是 register 狀態
12/15 21:16, 3F

12/15 21:19, , 4F
也就是 prefix 67h 和 prefix 66h 這兩種的狀態
12/15 21:19, 4F

12/15 22:57, , 5F
代表這個段是16-bit區段?
12/15 22:57, 5F
文章代碼(AID): #17OpyR19 (ASM)
討論串 (同標題文章)
本文引述了以下文章的的內容:
5
5
17年前, 12/12
完整討論串 (本文為第 2 之 3 篇):
5
5
17年前, 12/12
3
5
3
7
文章代碼(AID): #17OpyR19 (ASM)