1 2 下一页 [地址] 是取地址指向的内容: ; Test14_1.asm .386 .model flat, stdcall include Windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .data ddVal dd 123 .code main proc PrintDec offset ddVal ;4206592 - 这是变量 ddVal 的地址 PrintDec ddVal ;123 - 这是变量值 lea ebx, ddVal ;Lea 是专门获取地址的指令, 这同 mov ebx, offset ddVal PrintDec ebx ;4206592 mov eax, [ebx] ;现在 ebx 中放着 ddVal 变量的地址, [ebx] 则表示地址指向的值 PrintDec eax ;123 ret main endp end main
地址指向的是什么数据? ; Test14_2.asm .386 .model flat, stdcall include Windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .data dwVal dw 123 .code main proc lea ebx, dwVal ;把变量 dwVal 的地址放到 ebx ;但现在 dwVal 中放着的是 word 类型的数据, 而 [ebx] 默认是取 32 位的数据 ;这可通过伪指令 ptr 指定数据大小 ;同时需要把接收着换成 16 的(如 ax), 因为 mov 要求两个操作数的大小须一致 xor eax, eax ;清空 eax mov ax, word ptr [ebx] PrintDec eax ;123 ;也可以直接使用 movzx, 它可以从小到大(movzx r16/r32, r/8/r16/m8/m16) movzx eax, word ptr [ebx] PrintDec eax ;123 ret main endp end main (责任编辑:admin)
|