汇编你还想及格?
未完待续
1. 注释下面代码
Title Hello Word
.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 proc
mov ax,gga;ax=5678h
mov ebx,[ggb+2];ebx=43211234h,内存中的高位放在ebx高位
xor edx,edx;清零
mov edx,listsize;40h
call 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
对应的二进制数是1111 1111 1111 0000。
3.根据以下伪代码画出执行完push ebp后的堆栈图。
Push 10h
Push 20h
Push 30h
Call func1
func1 proc
push ebp
mov ebp,esp
sub esp,8;为局部变量保留空间
mov DWORD PTR [ebp-4],10 ;存放局部变量x
mov dword ptr [ebp-8],20 ;y
movzx eax,[ebp+8];30h
mov esp,ebp
pop ebp
ret
func1 endp
4. 要求编写汇编代码实现以下要求。
(1)接受用户输入四位字符串,如"4513"
(2)对字符串进行冒泡排序
(3)以二进制形式输出到控制台。比如1345输出0001 0011 0100 0101。
提示:可以使用Writechar,ReadChar。
解:排序完后eax循环左移,再把eax寄存器进栈保护,按位与保留最后一位,再与0比较,根据情况给al赋值,再调用writechar输出,pop eax。
5. 名词解析
数据传送,寻址
inc,dec不影响进位标志。
mov指令:两操作数尺寸一致,不能同时为内存操作数,目的操作数不能是CS,EIP,IP,立即数不能直接送给段寄存器。
xchg
neg
movsx
movzx
align
label
ptr
lengthof
typeof
sizeof
条件处理
not指令不影响标志。
test
loopz
ja
jb
jg
jl
高级过程
addr
offset
lea
stdcall
cdecl
proto
proc
uses
local
enter
leave
invoke
call
push
pop
pushfd
pushad
pusha
整数算术运算
imul
idiv
CBW
CWD
CDQ
ADC
SBB
stc
clc
shl
sal
rol
rcl
shld
串处理
rep
movsb
cmpsb
scasb
stosb
lodsb