汇编语言数据传送示例

广告位

该程序中包含了本章迄今介绍的所有指令,包括:MOV、XCHG、MOVSX 和 MOVZX,展示了字节、字和双字…

该程序中包含了本章迄今介绍的所有指令,包括:MOV、XCHG、MOVSX 和 MOVZX,展示了字节、字和双字是如何受到它们的影响。同时,程序中还包括了一些直接 – 偏移量操作数。

  ;数据传送示例  .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   

调试程序期间,当逐步执行代码时,指令只要修改了标志位的值,则标志位就会显示为红色。这样就可以通过单步执行来了解指令是如何影响标志位的,并可以密切关注这些标志位值的变化。

关于作者: 汇编语言

为您推荐