使用.386后每条指令前都加了DB 66,为什么?
用MASM汇编下面程序,得到OMF格式的OBJ、EXE文件
反汇编EXE文件后看到每条指令前都加了DB 66指令
用二进制工具查看OBJ文件时,发现代码段中,每条指令前面的确加了数字66,下面的66就是
如果去掉前面的 .386 就没有数字66了
请问:谁知道为什么会加DB 66指令吗?
A0 30 00 03 00 00 66 B8 00 00 66 8E D8 66 8E C0 .0....f...f..f..
E8 00 00 00 00 66 83 C4 04 66 83 C4 02 66 8D 15 .....f...f...f..
00 00 00 00 B4 09 CD 21 B4 01 CD 21 66 B8 00 4C .......!...!f..L
CD 21 99 .!.
.386 (这里加386和不加有很大区别)
extern puts:near, gets:near
;用户输入一个字符串,按回车后程序回显该字符串,并提示按任意键退出程序
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0) ;初始化堆栈大小为100
SSEG ENDS
DSEG SEGMENT
;数据段:在此处添加程序所需的数据
str1 db "press any key to exit", 13, 10, '$'
keybuf db 80h dup(0); 键盘输入缓冲区
DSEG ENDS
CODE SEGMENT
assume cs:CODE, ds:DSEG, ss:SSEG
MAIN PROC ;主程序入口
mov ax, dseg
mov ds, ax
mov es, ax
push word ptr keybuf
push 10h
call gets
add sp,4
push word ptr keybuf
call puts
add sp,2
; 按任意键结束程序
lea dx,str1
mov ah,09h
int 21h
mov ah,01h
int 21h
; 返回DOS系统
mov ax,4c00h
int 21h
MAIN ENDP
CODE ENDS
END MAIN