微机原理实验 两个多位十进制数相减实验

本文介绍了使用汇编语言进行微机原理实验,内容涉及将两个ASCII码表示的十进制数相减,并处理结果的显示与存储。实验过程中强调了注意事项,如DOS函数调用顺序和正确控制循环结构。


前言

微机原理的学习基本大部分内容都和汇编语言相关,以下是笔者第一次实验的相关实验内容。

一、实验内容

将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

二、实验代码

DATAS SEGMENT
    	DATA1 DB 33H,39H,31H,37H,38H		;第一个数据(被减数)
    	DATA2 DB 36H,35H,30H,38H,32H		;第二个数据(减数)
    	MES1 DB '-','$'
    	MES2 DB '=','$'
DATAS ENDS

STACKS SEGMENT
    
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    
    MOV SI,OFFSET DATA1
    MOV BX,05								;循环五次
    CALL CHECK								;显示被减数
    MOV AH,09H								;DOS功能号,字符串显示
    LEA DX,MES1
    INT 21H
    MOV SI,OFFSET DATA2
    MOV BX,05
    CALL CHECK								;显示减数
    MOV AH,09H
    LEA DX,MES2
    INT 21H
    MOV SI,OFFSET DATA1
    MOV DI,OFFSET DATA2
    CALL SUBA								;减法运算
    MOV SI,OFFSET DATA1
    MOV BX,05
    CALL CHECK								;显示结果
    MOV DL,00H
    MOV AH,02H
    INT 21H
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
	MOV AH,4CH
    INT 21H
	
CHECK PROC									;显示子功能
P1:	
	MOV AH,02								;显示字符串中一字符
	MOV DL,[SI+BX-1]						;修改偏移量
	INT 21H
	DEC BX
	JNE P1
	RET
CHECK ENDP

SUBA PROC
	MOV DX,SI
	MOV BP,DI
	MOV BX,05
SU1:
	SUB BYTE PTR[SI+BX-1],30H
	SUB BYTE PTR[DI+BX-1],30H
	DEC BX									;将ASCII码表示的数字串
	JNZ SU1									;转化为十六进制的数字串
	MOV CX,05								;包括进位,共5位
	CLC										;清除进位位
SU2:										
	MOV AL,[SI]								
	MOV BL,[DI]		
	SBB AL,BL								;带进位相减
	AAS										;非组合BCD码减法调整
	MOV [SI],AL								;结果送被减数区
	INC SI
	INC DI									;指向下一位
	LOOP SU2								;循环
	MOV SI,DX
	MOV DI,BP
	MOV BX,05
SU3:
	ADD BYTE PTR [SI+BX-1],30H
	ADD BYTE PTR [DI+BX-1],30H
	DEC BX									;十六进制数字串转化ASCII码表示的数字串    
	JNZ SU3
	RET
SUBA ENDP
	
CODES ENDS
    END START

···
···

三、实验结果


在这里插入图片描述

四、注意事项

第一次调试的时候笔者把DOS退出指令放在了程序最末尾,结果导致卡死窗口。还有就是注意循环的控制。
汇编语言由于是低级语言,所以格外要注意程序控制流。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值