汇编语言实验二报告

实验目的

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

2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。

3、初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。

实验内容

计算1+2+3+…+10,将结果显示在屏幕上。
利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
对于第2题,怎样修改程序可以同时实现将10个数字的累加功能。(选作)
对于第2题,若要求输入的是两位数,又该怎么办?(选作)

设计思想

1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余 AL是商,AH是余数,后加上30h。

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

3、结合第1题和第2题。

4、修改输入。

程序代码

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
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的内容
    Str4 db 0DH,0AH,'SUM:','$'        	 ;定义Str4的内容
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       	;输出最小数
    lea dx,Str4
    mov ah,09
    int 21h
    sub ax,ax
    mov bx,0
    mov cx,9
    mov si,0
sum1:
    inc si   
    mov bl,buf[si]
    sub bl,30h
    add ax,bl
    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 start
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,09h
    int 21h
    mov ah,01h ; 输入1
    int 21h
    sub al,30h
    mov ah,0
    mov bl,10
    mul bl
    mov dl,al
    mov ah,01h ; 输入2
    int 21h
    sub al,30h
    mov ah,0
    add al,dl
    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 
printmax:
    lea dx,Str2
    mov ah,09
    int 21h
    mov ax,0
    mov al,max
    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
printmin:
    lea dx,Str3
    mov ah,09
    int 21h
    mov ax,0
    mov al,min
    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 start

截图

在这里插入图片描述
2.
在这里插入图片描述

在这里插入图片描述
4.
在这里插入图片描述
实验心得:通过本次实验实践练习了汇编程序的实际编写,加强了对汇编程序的编写技巧,进一步熟悉了编写汇编程序的上机环境和整个编译运行流程,掌握了使用dosbox工具运行汇编程序。
初步了解了汇编程序的分支设计逻辑和循环设计逻辑过程,为以后编写更加复杂的汇编程序打下了基础。了解了如何实现连续的数的循环加减操作,对寄存器和累加器等基本的计算机元器件的工作原理有了更加深入的理解。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是汇编语言算术运算类指令实验报告: 实验目的: 1. 理解汇编语言中算术运算类指令的含义和作用; 2. 掌握汇编语言中算术运算类指令的使用方法; 3. 学会设计和编写汇编程序。 实验内容: 本次实验主要涉及到以下算术运算类指令: 1. ADD:加法指令,用于将源操作数加到目的操作数中,并将结果存储在目的操作数中。 2. SUB:减法指令,用于将源操作数从目的操作数中减去,并将结果存储在目的操作数中。 3. MUL:乘法指令,用于将源操作数与目的操作数相乘,并将结果存储在目的操作数中。 4. DIV:除法指令,用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。 实验步骤: 1. 设计程序,包括变量的定义、常量的定义、算术运算的处理等。 2. 编写程序,按照步骤实现算术运算。 3. 调试程序,确保程序能够正确地实现算术运算。 4. 运行程序,观察结果是否正确。 实验结果: 下面是一个简单的加法程序: ``` ;定义变量和常量 .DATA X DW 10 Y DW 20 Z DW ? CONST DW 5 .CODE MAIN PROC MOV AX, @DATA MOV DS, AX ;进行加法运算 MOV AX, X ADD AX, Y ADD AX, CONST MOV Z, AX MOV AH, 4CH INT 21H MAIN ENDP END MAIN ``` 运行结果为: Z = X + Y + CONST = 10 + 20 + 5 = 35 实验结论: 本次实验通过设计和编写汇编程序,实现了算术运算类指令的处理,并且调试程序确保了程序能够正确地实现算术运算。通过实验,我深入理解了汇编语言中算术运算类指令的含义和作用,并且掌握了汇编语言中算术运算类指令的使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值