汇编小习题

发布于:2024-05-30 ⋅ 阅读:(89) ⋅ 点赞:(0)

汇编你还想及格?

未完待续

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


网站公告

今日签到

点亮在社区的每一天
去签到