汇编语言实验报告二

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言实验报告

(实验二)

一.实验目的

1.掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。

2.熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与

转移指令、循环指令等。

3.初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法

及使用02H号功能调用进行字符输出(显示)的方法。

二.程序说明

1.计算1+2+3+…+10,将结果显示在屏幕上。

2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP

(?)。编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、

最小数存入MIN单元,并将其在屏幕上显示出来。

三.设计思想

1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的

结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余al是商,ah是余数,后加上30h。

2、使用si寄存器,用于在存储器中寻址。利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。利用01号功能,输出。

四.程序代码

程序一

code segment

main proc far

assume cs:code

start:

push ds

sub ax,ax

push ax

mov bx,0ah

mov cx, 0ah

sum1:

add ax,bx

dec bx

loop sum1

printit:

mov bl,10

div bl

add al,30h

mov ch,ah

mov dl,al

mov ah,2

int 21h

add ch,30h

mov dl,ch

mov ah,2

int 21h

ret

main endp

code ends

end

程序二

data segment ;数据段定义开始

buf db 10 dup(?) ;数据定义及其存储空间

max db ?

min db ?

Str1 db 0DH,0AH,'Please input: ','$' ;定义Str1的内容Str2 db 0DH,0AH,'MAX:','$' ;定义Str2的内容Str3 db 0DH,0AH,'MIN:','$' ;定义Str3的内容data ends ;数据段定义结束

Stack segment stack ;堆栈段定义开始

db 10 dup(?)

stack ends ;堆栈段定义结束

code segment ;代码段定义开始

main proc far

assume cs:code,ds:data,ss:stack

start:

push ds

sub ax,ax

push ax

mov ax,data

mov ds,ax

mov ax,stack

mov ss,ax

mov cx,10

mov si,0 ;寄存器,用于寻址

mov bx,0

lop1:

lea dx,Str1

mov ah,09

int 21h

mov ah,01h ; 输入

int 21h

mov buf[si],al

inc si

loop lop1 ;返回循环1

mov cx,9

mov si,0

mov al,buf[si]

mov bl,al

lop2:

inc si

mov dl,buf[si]

cmp dl,al

jl compare1

mov al,dl

compare1:

cmp bl,dl ;比较,小的数放在bl

jl compare2

mov bl,dl

compare2:

loop lop2

mov max,al

mov min,bl

lea dx,Str2

mov ah,09

int 21h

mov dl,max

mov ah,02h

int 21h ;输出最大数

lea dx,Str3

mov ah,09

int 21h

mov dl,min

mov ah,02h

int 21h ;输出最小数

ret

main endp

code ends

end start

五.结果分析并回答:

1.设计的程序包含了几个段

2.你的代码经过编译和连接之后,总共占用多少个字节

3.调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?

4.对于第2题,怎样修改程序可以同时实现将10个数字的累加功能

5.对于第2题,若要求输入的是两位数,又该怎么办?程序一:

运行结果

1、本程序包含了一个段,即为代码段

2、代码经过编译和连接之后,共占32个字节

3、第一条指令的地址码

最后一条指令的地址码

程序二

运行结果

1、本程序包含了数据段、堆栈段和代码段三个段。

2、代码经过编译和连接之后,总共占用33个字节

3、第一条指令的地址码

最后一条指令的地址码

相关文档
最新文档