汇编语言程序框架

详细内容请访问我的站点: 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文件,题目中代码有错误所以运行后报错:

汇编语言程序框架_第1张图片

 

修改错误后,程序操作如下:

 

a: editplus编辑保存为asm格式文件:

汇编语言程序框架_第2张图片

b: 编译,打开DOSbox,进入工作区,输入命令masm p1.asm进行编译

汇编语言程序框架_第3张图片

 

c:连接,输入命令link p1

汇编语言程序框架_第4张图片

d:运行,在debug中执行程序,输入命令 debug p1.exe载入程序,使用t命令单步运行:

汇编语言程序框架_第5张图片

任务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:程序运行如下:

汇编语言程序框架_第6张图片 汇编语言程序框架_第7张图片 汇编语言程序框架_第8张图片 汇编语言程序框架_第9张图片

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: 运行如下:

汇编语言程序框架_第10张图片

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:运行如下:

汇编语言程序框架_第11张图片

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:运行如下:

汇编语言程序框架_第12张图片汇编语言程序框架_第13张图片汇编语言程序框架_第14张图片

C :运行结果说明:

先设置ds0,将bx作为段地址,设置初始地址为地址200h,设置loop循环,循环40次,使用dl的低位作为中间量,每次循环自动加一,将其写入相关内存。

三、实验总结

O(事实):今天实验,练习了自行编写源程序,然后编译、连接、运行,观察最后结果,总结和分析。

R(感受):感觉编写汇编程序编写起来还是比较容易的。

I(思考):汇编语言与其他语言相比,编写起来考虑的方面有所区别,更多的要求考虑硬件方面的调用。

D(决定):今后要加强汇编语言的学习,强化训练,尽快掌握其常用的方法及设计思想,更多的关注计算机硬件的运行。


你可能感兴趣的:(汇编语言)