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


前言

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

一、实验内容

将两个多位十进制数相减,要求被减数,减数均以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退出指令放在了程序最末尾,结果导致卡死窗口。还有就是注意循环的控制。
汇编语言由于是低级语言,所以格外要注意程序控制流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值