如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第5章32位汇编程序设计5.132位指令系统32位的寻址方式(2)在使用寄存器间接寻址、寄存器相对寻址或相对的基址变址寻址时,既可以用16位的寄存器,又可以使用32位的寄存器。例如:MOVAX,[BX]MOVDX,[EBX]MOVEAX,[EBX+80H]MOVEAX,[EBX+ESI+0400H](3)80386的所有32位通用寄存器都可以作为偏移地址参加寻址,而在8086/8088/80186/80286中的AX、DX、CX寄存器不能用来存放存储器操作数的偏移地址。例如:MOVAX,[ECX];正确MOVBX,[EAX];正确MOVBX,[AX];在16位下错误(4)80386的所有32位通用寄存器都可以作为基地址寄存器使用,除了ESP寄存器以外都可以作为变址寄存器使用。由此可见,16位存储器操作数的寻址方式的组成公式为:16位有效地址=基址寄存器(BX/BP)+变址寄存器(SI/DI)+8/16位的偏移量其中基址寄存器只能是BX或BP,变址寄存器只能是SI或DI。而32位存储器操作数的寻址方式的组成公式为:32位有效地址=基址寄存器+(变址寄存器*比例)+8/32位的偏移量其中基址寄存器为任何8个32位通用寄存器之一,变址寄存器为除ESP之外的任何32位通用寄存器之一,比例可以是1、2、4或8,代表操作数的长度是1、2、4或8字节,位移量可以是8或32位的值。32位扩展指令(1)串输入指令格式及功能:INSB/INSW/INSD;ES:[DI/EDI]←DX指定的输入端口,DI/EDI←DI/EDI±1/2/4指令说明:INS指令从由DX指定的输入端口中输入一个字节(INSB)或一个字(INSW)或一个双字INSD)数据到由ES:[DI/EDI]指定的存储单元中,且能使DI/EDI自动±1或±2或±4;DX内容保持不变。ES段寄存器不能被段超越。(2)串输出指令格式及功能:OUTSB/OUTSW/OUTSD;DX指定的输出端口←DS:[SI/ESI],SI/ESI←SI/ESI±1/2/4指令说明:该指令实现从由DS:[SI/ESI]指定的内存单元中的一个字节(OUTSB)或一个字(OUTSW)或一个双字(OUTSD)数据到由DX指定输出端口中,且能使SI/ESI自动±1或±2或±4;DX内容保持不变。DS段寄存器可以被段超越。80386新增指令80486新增指令Pentium新增指令Pentiumpro新增指令DOS下32位汇编程序指定汇编程序识别新指令处理16位段和32位段注意有些指令在16位段和32位段的差别DOS32位程序举例Windows下32位汇编程序Windows汇编语言特点在Windows下设计应用程序不使用API是不可能的,有些高级语言看似没有使用API,只不过它们提供的模块对API进了封装。API是Windows的基础,API包含在众多扩展名为dll的动态连接库中,三个关键的动态连接库文件是:Kernel32.dll:系统服务功能。包含内存管理、任务管理和文件操作等API函数。一般情况下都要使用该动态连接库。也许一个程序什么功能也没有,但不能没有类似DOS下退出内存的.EXIT0指令,在Windows下为API函数ExitProcess。Gui32.dll:图形设备接口。提供显示文本和图形等API函数。Windows程序最大的一个特点是窗口,如果设计的程序要包含窗口,则需要该库中的函数,包括窗口的建立、显示、事件处理和销毁。User32.dll:用户接口服务。提供建立窗口和传送消息的API函数。用户点击按钮或拖动窗口,界面之所以出现相应的变化,因为系统对不同的用户操作用消息来描述,不同的消息又对应不同的函数,由它们去处理。消息:消息是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个用MSG命名的结构传递给应用程序的,这个结构中包含了消息的类型等信息。其定义如下:MSGstructHwnddword?;消息目的窗口句柄Messagedword?;消息常量标识符,是用WM_开头的预定义常量wParamdword?;32位消息带的参数1lParamdword?;32位消息带的参数2Timedword?;消息创建时的时间PtPOINT<>;消息创建时的鼠标位置MSGendsMASM32开发环境MASM32的网络资源MASM32界面.386;伪指令,还可以是.486.586.MODELFlat,STDCALL;内存模式伪指令.DATA;STDCALL告诉编译器参数的传递约定。;初始