作者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