汇编语言数据传送示例

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

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

4.1 操作数类型
4.2 MOV指令
4.3 MOVZX和MOVSX指令
4.4 LAHF和SAHF指令
4.5 XCHG指令
4.6 直接偏移量操作数
4.7 汇编语言数据传送示例
4.8 加法和减法详解
4.9 OFFSET运算符
4.10 ALIGN伪指令
4.11 PTR运算符
4.12 TYPE运算符
4.13 LENGTHOF运算符
4.14 LABEL伪指令
4.15 间接寻址
4.16 JMP和LOOP指令
4.17 64位MOV指令
4.18 64位加法和减法

猜你喜欢

转载自blog.csdn.net/Javaxuxuexi/article/details/93401578