汇编语言程序框架

2019-04-15 13:55发布

详细内容请访问我的站点: https://www.liangking.me/2017/03/25/assembly-experiment2/
  实验二 汇编语言程序框架       一、实验目的 l 理解程序在CSIP寄存器的控制下运行的过程 l 学会由汇编语言源程序到可执行文件的生成过程,学会用Debug运行程序 l 学会在程序中操作栈的方法 l 学会用loop指令编制循环程序解决简单问题 l 学会用bxloop指令配合访问连贯的内存空间 二、实验内容过程记录 任务1-编制第一个汇编程序 (1)将下面的程序保存为p1.asm,将其生成可执行文件p1.exe assume cs:code code segment         mov ax,0123H          add ax,ax           mov ax,4c00h         int 21h codesg ends end (2)Debug中单步执行这个程序     第一步先按照题目中的代码敲入编辑器保存文件,编译asm文件,题目中代码有错误所以运行后报错:
  修改错误后,程序操作如下:   a: editplus编辑保存为asm格式文件:
b: 编译,打开DOSbox,进入工作区,输入命令masm p1.asm进行编译
  c:连接,输入命令link p1
d:运行,在debug中执行程序,输入命令 debug p1.exe载入程序,使用t命令单步运行:
任务2-栈的操作 (1)10000H~1000FH这段空间当作栈,初始状态栈是空的(据此设置SSSP); (2)设置AX=001AHBX=001BH (3)利用栈,交换AXBX中的数据。 (下面列出源代码,并截图说明运行的结果)。 a:程序源代码如下: assume cs:codesg codesg segment mov ax,1000H mov bx,000FH mov ss,ax mov sp,bx mov ax,001AH sub sp,2 push ax mov bx,001BH sub sp,2 push bx pop ax add sp,2 pop bx add sp,2   mov ax,4c00h int 21h   codesg ends end   b:程序运行如下:
C: 运行结果说明:本程序将10000H~1000FH这段空间当作栈,要利用栈来交换axbx的值,就是利用了栈后进先出的原则,先让ax入栈,再让bx入栈;出站时,先出栈到ax中,再出栈到bx中,这样就实现了两个寄存器的内容的交换。   任务3-循环程序设计(1) 编程序计算2^10,将最后结果保存在dx a、源代码如下: assumecs:code codesegment mov dx,2 mov cx,9 s:adddx,dx loop s   movax,4c00h int 21h code ends end   b: 运行如下:
c: 程序说明: 2^10,可以转化为多次求dx自身的和,用loop语句就可以实现。 任务4-循环程序设计(2) 编程序,用loop指令计算从1100的所有整数相加的和,运算结果请保存到寄存器DX中。 a : 源程序: assumecs:code codesegment   mov dx,0   mov bx,1   mov cx,100   s:add dx,bx     add bx,1   loop s     mov ax,4c00h   int 21h   code ends end   b:运行如下:
c:运行结果说明: 计算从1100的所有整数相加的和,每次bx执行加一操作,下一次循环是用ax与此bx相加,实现了1+2+3++100 任务5-[bx]loop联合访问连续的内存单元 编程序,向内存0:200H0:23FH依次传送数据0~63(3FH),即0:200H中为00:201中为1,……依此类推 a : 程序源码: assume cs:code code segment     movax,0   movds,ax   movdx,0   movbx,200h   movcx,40h   s:   mov[bx],dl   adddl,1   incbx     loops     movax,4c00h   int21h   code ends end   b:运行如下:
C :运行结果说明: 先设置ds0,将bx作为段地址,设置初始地址为地址200h,设置loop循环,循环40次,使用dl的低位作为中间量,每次循环自动加一,将其写入相关内存。 三、实验总结 O(事实):今天实验,练习了自行编写源程序,然后编译、连接、运行,观察最后结果,总结和分析。 R(感受):感觉编写汇编程序编写起来还是比较容易的。 I(思考):汇编语言与其他语言相比,编写起来考虑的方面有所区别,更多的要求考虑硬件方面的调用。 D(决定):今后要加强汇编语言的学习,强化训练,尽快掌握其常用的方法及设计思想,更多的关注计算机硬件的运行。