彩笔好笨啊,知道原理还能写错。
1. 注释下面代码
Title Simple Add
.386 ;使用80386指令集
.model flat, stdcall;内存模型为平坦模型,子程序采用stdcall约定
.stack 4096;为运行时堆栈分配4096空间
ExitProcess proto , dwExitCode:DWORD;为过程创建过程原型
;过程原型声明了过程的名称和参数列表。
DumpRegs proto
.data
gga label word ;不占空间
ggb dd 12345678h,87654321h;占4*2字节
;低78 56 34 12 21 43 65 87高
ggc dword "abcd" ; 占4*1字节
ggd=1234h;不占空间,或者说所占空间不连着ggc
ggf equ 12h;不占空间,或者说所占空间不连着ggc
ggg byte 10 dup("abc");占用1*10*3字节
ggh dd 10h,3 dup(50),20;占用4*5字节
ggi db 2 dup(?);占用1*2字节
listsize = $-gga ;64=0x40.code
Main procmov ax,gga;ax=5678hmov ebx,[ggb+2];ebx=43211234h,内存中的高位放在ebx高位xor edx,edx;清零mov edx,listsize;40hcall dumpregs;打印寄存器invoke ExitProcess,0;push 0 ;call ExitProcess
Main endp
end main
2.
var1 word -16
原码1000 0000 0001 0000
补码1111 1111 1111 0000
对应的二进制数是FFF0。
3.根据以下伪代码画出执行完push ebp后的堆栈图。
Push 10h
Push 20h
Push 30h
Call func1func1 procpush ebpmov ebp,espsub esp,8;为局部变量保留空间mov DWORD PTR [ebp-4],10 ;存放局部变量x mov dword ptr [ebp-8],20 ;ymovzx eax,[ebp+8];30hmov esp,ebppop ebpret
func1 endp