• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

孤独的饺子、

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

实验4 汇编应用编程和c语言程序反汇编分析

实验任务1

编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'。
代码如下:

 

 运行结果如下:

实验任务2

编写子程序printStr,实现以指定颜色在屏幕上输出字符串。调用它,完成字符串输出。

使用任意文本编辑器,录入汇编源程序task2.asm。

 

 

 运行如下:

对源程序做如下修改:
把line3改为: str db 'another try',0
把line12改为: mov al,4
再次汇编、运行程序,观察运行结果。
问题1:line19-22, line36-39,这组对称使用的push、pop,这样用的目的是什么?
分析:暂存对应寄存器的内容,执行完子程序后可以进行恢复。
问题2:line30的功能是什么?
分析:将低位的字符信息和高位的颜色信息存储到显存中。

实验任务3

使用任意文本编辑器,录入汇编源程序task3.asm。
阅读源代码,理解子程序num2str的汇编实现。

子任务1

对task3.asm进行汇编、链接,得到可执行程序后,在debug中使用u命令反汇编,使用g命令执行
到line15(程序退出之前),使用d命令查看数据段内容,观察是否把转换后的数字字符串'1984'存放
在数据段中str标号后面的单元。

子任务2

对task3.asm源代码进行修改、完善,把task2.asm中用于输出以0结尾的字符串的子程序加进来,
实现对转换后的字符串进行输出。
 
把task3.asm源代码中,line3中整数改成0~2559之间的任意数值,运行测试,观察结果。
改成1324:

实验任务4

使用任意文本编辑器,录入汇编源程序task4.asm。

运行如下:

问题1:line12-19实现的功能是?
分析:利用int 21h的1号子功能,判断是否为‘#’。
问题2:line21-27实现的功能是?
分析:利用int 21h的2号子功能,输出键盘输入的‘#’之前的内容。

实验任务5

在visual studio集成环境中,编写一个简单的包含有函数调用的c程序。
代码如下:
设置断点并进行反汇编:

分析:高级语言中,参数传递和返回值在汇编语言中是通过栈,使用call指令操作,使用eax、ebp等寄存器来实现的。

(1)将函数参数入栈,第一个参数在栈顶,最后一个参数在栈底。

(2)执行call指令,调用该函数,进入函数的代码空间。

(3)函数返回到call指令的下一行,将堆栈指针加一个数值(入栈参数的总长度),恢复到步骤1之前的值。

posted on 2020-12-17 18:16  孤独的饺子、  阅读(102)  评论(2)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3