首页 > 汇编语言 > 数据操作相关运算符和指令
阅读:4,964
汇编语言数据传送示例
该程序中包含了本章迄今介绍的所有指令,包括:MOV、XCHG、MOVSX 和 MOVZX,展示了字节、字和双字是如何受到它们的影响。同时,程序中还包括了一些直接 - 偏移量操作数。
每个标志位有两个值:0(清除)或 1(置位)。示例如下:
;数据传送示例 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data val1 WORD 1000h val2 WORD 2000h arrayB BYTE 10h,20h,30h,40h,50h arrayW WORD 100h,200h,300h arrayD DWORD 10000h,20000h .code main PROC ;演示 MOVZX 指令 mov bx,0A69Bh movzx eax,bx ;EAX = 0000A69Bh movzx edx,bl ;EDX = 0000009Bh movzx cx,bl ;CX = 009Bh ;演示 MOVSX 指令 mov bx,0A69Bh movsx eax,bx ;EAX = FFFFA69Bh movsx edx,bl ;EDX = FFFFFF9Bh mov bl,7Bh movsx cx,bl ;CX = 007Bh ;内存-内存的交换 mov ax,val1 ;AX = 1000h xchg ax val2 ;AX = 2000h,val2 = 1000h mov val1,ax ;val1 = 2000h ;直接-偏移量寻址(字节数组) mov al,arrayB ;AL = 10h mov al,[arrayB+1] ;AL = 20h mov al,[arrayB+2] ;AL = 30h ;直接-偏移量寻址(字数组) mov ax,arrayW ;AX = 100h mov ax,[arrayW+2] ;AX = 200h ;直接-偏移量寻址(双字数组) mov eax,arrayD ;EAX = 10000h mov eax,[arrayD+4] ;EAX = 20000h mov eax,[arrayD+4] ;EAX = 20000h INVOKE ExitProcess,0 main ENDP END main该程序不会产生屏幕输出,但是可以用调试器(debugger)运行。
在 Visual Studio 调试器中显示 CPU 标志位
在调试期间显示 CPU 状态标志位时,在 Debug 菜单中选择 Windows 子菜单,再选择 Register。在 Register 窗口,右键选择下拉列表中的 Flags。要想查看这些菜单选项,必须调 试程序。下表是 Register 窗口中用到的标志位符号:标志名称 | 溢岀 | 方向 | 中断 | 符号 | 零 | 辅助进位 | 奇偶 | 进位 |
---|---|---|---|---|---|---|---|---|
符号 | OV | UP | EI | PL | ZR | AC | PE | CY |
每个标志位有两个值:0(清除)或 1(置位)。示例如下:
OV = 0 UP = 0 EI = 1
PL = 0 ZR = 1 AC = 0
PE = 1 CY = 0