实验4 汇编应用程序和c语言程序反汇编分析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了实验4 汇编应用程序和c语言程序反汇编分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3237字,纯文字阅读大概需要5分钟。
内容图文

四、实验结论
1. 实验任务1
源程序:
assume cs:code,ds:data data segment db ‘ Welcome to masm! ‘ db 16 dup(2) ;绿色 db 16 dup(36) ;绿底红色 db 16 dup(113) ;白底蓝色 data ends stacksg segment dw 8 dup(0) ;栈段用来临时存放cx stacksg ends code segment start: mov ax,data mov ds,ax ;data段地址送到ds mov ax,stacksg mov ss,ax ;stacksg段地址送到ss mov sp,16 mov ax,0b800h ;显存地址送到es mov es,ax mov bx,16 mov bp,0 mov cx,3 ;外层循环3次 s0: push cx ;外层循环cx值入栈 mov si,0 mov di,1824 ;显存地址:行:(25-3)/2=11,列:11*160+(160-32)/2 mov cx,16 ;内层循环16次 s: mov al,[si] mov es:[bp+di],al ;ascll码数据放入显存地址 mov al,[bx+si] mov es:[bp+di+1],al ;属性数据放入显存地址 inc si add di,2 loop s add bx,16 ;内存地址换行 add bp,160 ;显存地址换行 pop cx ;从栈顶弹出原cx的值,恢复cx loop s0 mov ah,4ch int 21h code ends end start
运行结果截图
2. 实验任务2
源程序
1 assume cs:code, ds:data 2 data segment 3 str db ‘another try‘, 0 4data ends 5 6code segment 7start: 8 mov ax, data 9 mov ds, ax 1011 mov si, offset str 12 mov al, 413 call printStr 1415 mov ah, 4ch 16int 21h 1718printStr: 19 push bx 20 push cx 21 push si 22 push di 2324 mov bx, 0b800H 25 mov es, bx 26 mov di, 027s: mov cl, [si] 28 mov ch, 029 jcxz over 30 mov ch, al 31 mov es:[di], cx 32 inc si 33 add di, 234 jmp s 3536over: pop di 37 pop si 38 pop cx 39 pop bx 40 ret 4142code ends 43 end start
运行结果截图
把line3改为: str db ‘another try‘, 0
把line12改为:mov al, 4
再次汇编、运行程序,观察运行结果。
基于运行结果,理解源代码,以及,组合使用转移指令call和ret实现子程序的原理与方法。具体地,在line18-40中:
line19-22, line36-39,这组对称使用的push、pop,这样用的目的是什么?
实现数据的暂存,可用的寄存器有限,将一些寄存器中的数据暂存起来,在子程序中使用寄存器就不会影响原来的值
line30的功能是什么?
mov ch,al:设置字符的属性
3. 实验任务3
子任务1
子任务2
对task3.asm源代码进行修改、完善,实现对转换后的字符串进行输出。
1 assume cs:code, ds:data 2 data segment 3 x dw 2001 4 str db 16 dup(0) 5data ends 6 7code segment 8start: 9 mov ax, data 10 mov ds, ax 11 mov ax,0b800H 12 mov es,ax 13 mov ax, x 14 mov di, offset str 15 mov si,016 call num2str 1718 mov ah, 4ch 19int 21h 2021num2str: 22 push ax 23 push bx 24 push cx 25 push dx 2627 mov cx, 028 mov bl, 1029s1: 30 div bl 31 inc cx 32 mov dl, ah 33 push dx 34 mov ah, 035 cmp al, 036 jne s1 37s2: 38 pop dx 39 or dl, 30h 40 mov [di], dl 41 mov dh,242 mov es:[si],dx ;添加的代码 43 inc di 44 add si,245 loop s2 4647 pop dx 48 pop cx 49 pop bx 50 pop ax 5152 ret 53code ends 54 end start
把task3.asm源代码中,line3中整数改成0~2559之间的任意数值,运行测试,观察结果。
4. 实验任务4
程序源代码
1 assume cs:code, ds:data 2 data segment 3 str db 80 dup(?) 4data ends 5 6code segment 7start: 8 mov ax, data 9 mov ds, ax 10 mov si, 01112s1: 13 mov ah, 114int 21h 15 mov [si], al 16 cmp al, ‘#‘17 je next 18 inc si 19 jmp s1 20next: 21 mov cx, si 22 mov si, 023 s2: mov ah, 224 mov dl, [si] 25int 21h 26 inc si 27 loop s2 2829 mov ah, 4ch 30int 21h 31code ends 32 end start
运行测试截图
结合运行结果,理解程序功能,了解软中断指令。具体地:
line12-19实现的功能是?
从键盘输入字符,遇到‘#‘通过转移指令中断
line21-27实现的功能是?
输出栈内的字符
5. 实验任务5
在visual studio集成环境中,编写一个简单的包含有函数调用的c程序。代码如下:
1 #include <stdio.h> 2int sum(int, int); 3 4int main() { 5int a = 2, b = 7, c; 6 7 c = sum(a, b); 8 9return0; 10} 1112int sum(int x, int y) { 13return (x + y); 14 }
在line7, line13分别设置断点,在调试模式下,查看反汇编代码。
总结对这个简单的c代码反汇编后,你对反汇编出来的汇编指令分析的内容总结。
参数传递和返回值是通过栈实现的
参数传递:形参参数入栈自右向左。先借助寄存器,将参数b 的地址压入堆栈寄存器eax,再将参数a 的值压入堆栈寄存器ecx
通过 call 指令调用函数sum,ret指令实现函数返回
每次调用需将原始的ss sp si di入栈,实现数据的暂存,返回后再将这些数据弹出,函数相当于子程序
原文:https://www.cnblogs.com/wyyhhh/p/14131164.html
内容总结
以上是互联网集市为您收集整理的实验4 汇编应用程序和c语言程序反汇编分析全部内容,希望文章能够帮你解决实验4 汇编应用程序和c语言程序反汇编分析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。