使用.386后每条指令前都加了DB 66,为什么?

dragonzht 2010-02-03 09:18:47
用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
...全文
374 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2010-02-04
  • 打赏
  • 举报
回复
指令前缀,用来区分不同的操作数长度。
cnzdgs 2010-02-03
  • 打赏
  • 举报
回复
在16位代码中,66H前缀表示指令使用32位操作数,例如mov ax,bx对应的机器码前面加上66H,则表示mov eax,ebx。
在32位代码中,66H前缀表示指令使用16位操作数。
DISINHUI 2010-02-03
  • 打赏
  • 举报
回复
windows环境下32位汇编语言程序设计
www.chinaitlab.com可以下载,请参考这本书,经典。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧