汇编程序6

汇编程序6

将四个同学学号的后四位(十进制)相加,并用十六进制形式显示输出。(0583是本人的学号,4489、1884是本组成员的学号,另外一个随机)
程序编写:定义了A,B,C,D数据区分别用来存储四个同学的学号后四位,从控制台输入四个同学学号的后四位,最后将相加的结果(AX)转成十六进制(BX)并显示。
;四个后四位(十进制)相加,以十六进制形式输出

DATA SEGMENT
	A DB 5					;为调用10号功能准备的数据区A
    	DB 0
    	DB 5 DUP(0)
	B DB 5					;为调用10号功能准备的数据区B
    	DB 0
    	DB 5 DUP(0)
	C DB 5					;为调用10号功能准备的数据区C
    	DB 0
    	DB 5 DUP(0)
    D DB 5
        DB 0
        DB 5 DUP(0)
   	SUM DW 0				;数值结果数据区
   	TEN DW 10				;固定值10,用于加倍
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
BEGIN:	MOV AX,DATA
        MOV DS,AX
MAIN:	CALL INPUT				;主程序
		MOV SI,OFFSET A
		CALL PROCDP
		MOV SI,OFFSET B
		CALL PROCDP
		MOV SI,OFFSET C  
		CALL PROCDP 
        MOV SI,OFFSET D  
		CALL PROCDP
        CALL OUTPUT
        MOV AH,4CH
        INT 21H

INPUT PROC 						;输入两个数,回车换行表示结束
		MOV DX,OFFSET A					;10号功能调用输入
        MOV AH,10
        INT 21H
        MOV DL,0AH						;换行
        MOV AH,2
        INT 21H
        MOV DX,OFFSET B					;10号功能调用输入
        MOV AH,10
        INT 21H
		MOV DL,0AH						;换行
        MOV AH,2
        INT 21H
        MOV DX,OFFSET C				;10号功能调用输入
        MOV AH,10
        INT 21H
		MOV DL,0AH						;换行
        MOV AH,2
        INT 21H
        MOV DX,OFFSET D 				;10号功能调用输入
        MOV AH,10
        INT 21H
        RET
INPUT ENDP

PROCDP PROC    				;输入的数转为十进制,并按位直接加到sum,该程序调用两次
		ADD SI,2					;跳过数据区头两个用于指明字符个数的字节
		MOV BX,4					;4位十进制数,从个位开始处理
		MOV CX,1					;倍数,用于按位累加
LOP:	DEC BX
		MOV AL,[SI][BX]				;基址变址方式寻址
		AND AX,00FFH				;AX高位清零
		SUB AL,30H					;从ASCII码转为十进制数
		MUL CX
		ADD SUM,AX					;累加
		MOV AX,CX					;CX的值乘10,用于按位加倍
		MUL TEN
		MOV CX,AX
		CMP BX,0					;如果BX=0,说明已经处理完
		JNE LOP
		RET
PROCDP ENDP

OUTPUT PROC 				;转化成十六进制输出
		MOV DL,0AH
        MOV AH,2
        INT 21H
        MOV BX,SUM
        MOV CH,4
		MOV CL,4
T1: 	ROL BX,CL				;循环左移4位		
        MOV AL,BL				;屏蔽高4位
        AND AL,0FH
        ADD AL,30H				;转换为ASCII码
	 	CMP AL,3AH				;ASCII码与3AH比较,如果大于3AH说明已经到了A~F的范围
        JL T2
        ADD AL,07H
T2:   MOV DL,AL					;不大于3AH说明在0~9范围
    	MOV AH,2
    	INT 21H
    	DEC CH
    	JNZ T1
        
    	MOV DL,48H			;显示字符H,标注结果是十六进制
        MOV AH,2
        INT 21H
    	RET
OUTPUT	ENDP

CODE ENDS
	END BEGIN

运行结果显示: 最后的结果为:0583+4489+1884+1234=5338(1FFE)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值