实验4 汇编应用编程和c语言程序反汇编分析
2021-03-10 20:28
标签:查看 alt 结束 输出 设置 环境 测试 键盘 之间 源代码 运行结果截图 源程序 运行结果截图 把line3改为: str db ‘another try‘, 0 把line12改为:mov al, 4 运行结果截图 基于运行结果,理解源代码,以及,组合使用转移指令call和ret实现子程序的原理与方法。具体地,在 line18-40中: line19-22, line36-39,这组对称使用的push、pop,这样用的目的是什么? 答:在子程序的开始将子程序中所有用到的寄存器中的内容都用栈保存起来,在子程序返回前再恢复。 line30的功能是什么? 答:设置字符颜色属性 子任务1的反汇编截图 子任务2修改、完善后的完整汇编源代码 运行测试截图 把task3.asm源代码中,line3中整数改成0~2559之间的任意数值,运行测试,观察结果。 程序源代码 汇编、链接、运行程序,输入一个字符串并以#结束(比如,2020, bye#)观察运行结果 结合运行结 果,理解程序功能,了解软中断指令。具体地: line12-19实现的功能是? 答:将键盘输入字符存到指定的栈内,如果遇到‘#‘字符,则通过转移指令中断 line21-27实现的功能是? 答:在屏幕上输出栈内字符 在visual studio集成环境中,编写一个简单的包含有函数调用的c程序。代码如下: 在line7, line13分别设置断点,在调试模式下,查看反汇编代码。 分析反汇编代码可知,从汇编角度,高级语言中参数传递和返回值是通过栈实现的。参数传递顺序:先将参数b入栈,再将参数a入栈,都是借助寄存器完成的。 实验4 汇编应用编程和c语言程序反汇编分析 标签:查看 alt 结束 输出 设置 环境 测试 键盘 之间 原文地址:https://www.cnblogs.com/lj0512/p/14133900.html四、实验结论
1. 实验任务1
assume cs:code,ds:data
data segment
db ‘welcome to masm!‘
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h ;显示缓冲区的起始地址
mov es,ax
mov bx,0720h ;设置中间行中间列的首地址
mov si,0 ;指向显存
mov cx,16 ;共16个字符,循环16次
s: mov ax,ds:[si]
mov ah,2h
mov es:[bx],ax ;设置绿色字体
mov ah,24h
mov es:[bx+0a0h],ax ;设置绿底红色
mov ah,71h
mov es:[bx+0a0h+0a0h],ax ;设置白底蓝色
inc si ;指向下一个字符
add bx,2 ;指向下一个显存单元
loop s
mov ax,4c00h
int 21h
code ends
end start
2. 实验任务2
assume cs:code, ds:data
data segment
str db ‘try‘, 0
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si, offset str
mov al, 2
call printStr
mov ah, 4ch
int 21h
printStr:
push bx
push cx
push si
push di
mov bx, 0b800H
mov es, bx
mov di, 0
s: mov cl, [si]
mov ch, 0
jcxz over
mov ch, al
mov es:[di], cx
inc si
add di, 2
jmp s
over: pop di
pop si
pop cx
pop bx
ret
code ends
end start
3. 实验任务3
assume cs:code, ds:data
data segment
x dw 1984
str db 16 dup(0)
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ax,0b800h
mov es,ax
mov ax, x
mov di, offset str
mov si,0
call num2str
mov ah, 4ch
int 21h
num2str:
push ax
push bx
push cx
push dx
mov cx, 0
mov bl, 10
s1:
div bl
inc cx
mov dl, ah
push dx
mov ah, 0
cmp al, 0
jne s1
s2:
pop dx
or dl, 30h
mov [di], dl
mov dh,2
mov es:[si],dx
add si,2
inc di
loop s2
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start
4. 实验任务4
assume cs:code, ds:data
data segment
str db 80 dup(?)
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si, 0
s1:
mov ah, 1
int 21h
mov [si], al
cmp al, ‘#‘
je next
inc si
jmp s1
next:
mov cx, si
mov si, 0
s2: mov ah, 2
mov dl, [si]
int 21h
inc si
loop s2
mov ah, 4ch
int 21h
code ends
end start
5. 实验任务5
#include
上一篇:N皇后问题 -Python
下一篇:js循环遍历数组的方式
文章标题:实验4 汇编应用编程和c语言程序反汇编分析
文章链接:http://soscw.com/index.php/essay/62911.html