【汇编】 从键盘上接收一位十进制数 X,计算 Y 值,并以十六进制形式显示出来,Y 按 下列公式计算。

问题描述:

  1. 从键盘上接收一位十进制数 X,计算 Y 值,并以十六进制形式显示出来,Y 按
    下列公式计算。

汇编代码,已调试

DATA SEGMENT 
	TABLE DW L1,L2,L3,L4,L5,L6
	MSG1 DB 'Please input an integer :$'
	MSG2 DB 'Y=$'
	MSG3 DB 'Illegally input!$'
DATA ENDS

STACK1 SEGMENT PARA STACK
	DW 20H DUP(0)
STACK1 ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA,SS:STACK1
START:	MOV AX,DATA
		MOV DS,AX
		
		LEA DX,MSG1
		MOV AH,09H
		INT 21H		;输出提示信息
		
		MOV AH,01H
		INT 21H		;输入一个数字
		
		CMP AL,33H
		JB GEND
		CMP AL,36H
		JA GEND
		AND AL,0FH	;转换为数字
		XOR AH,AH	;高位清零
		DEC AL		;获取x-1
		SHL AL,1    	;计算L几
		MOV BX,OFFSET TABLE ;获取table的内容
		ADD BX,AX
		JMP [BX]
		
GEND:	
		MOV DL,0AH
		MOV AH,02H
		INT 21H		;换行
		LEA DX,MSG3
		MOV	AH,09H
		INT 21H		;显示提示错误信息
		JMP L7
		
L1:		JMP GEND

L2: 	JMP GEND

L3:		
		CALL HHSC
		MOV DL,31H
		MOV AH,02H
		INT 21H
		MOV DL,32H
		MOV AH,02H
		INT 21H
		JMP L7
		
L4:		
		CALL HHSC
		MOV DL,38H
		MOV AH,02H
		INT 21H
		JMP L7
		
L5:		
		CALL HHSC
		MOV DL,32H
		MOV AH,02H
		INT 21H
		MOV DL,35H
		MOV AH,02H
		INT 21H
		JMP L7

L6:		
		CALL HHSC
		MOV DL,31H
		MOV AH,02H
		INT 21H
		MOV DL,38H
		MOV AH,02H
		INT 21H
		JMP L7

L7:		MOV AH,4CH
		INT 21H		;终止程序
		
HHSC PROC 
		MOV DL,0AH
		MOV AH,02H
		INT 21H		;换行
		LEA DX,MSG2
		MOV AH,09H
		INT 21H		;显示输出信息
		RET
HHSC ENDP

CODE ENDS

END START

结果展示
在这里插入图片描述

以下是实现该功能的 x86 汇编语言代码: ```assembly section .data input_msg db "请输入一个五位十进制:", 0 output_msg db "转换为十六进制为:", 0 section .bss num resw 1 section .text global _start _start: ; 输出提示信息 mov eax, 4 mov ebx, 1 mov ecx, input_msg mov edx, 26 int 0x80 ; 读取输入的十进制 mov eax, 3 mov ebx, 0 mov ecx, num mov edx, 5 int 0x80 ; 将输入的十进制转换为十六进制 mov eax, [num] mov ebx, 16 xor edx, edx div ebx push dx xor edx, edx div ebx push dx xor edx, edx div ebx push dx xor edx, edx div ebx push dx xor edx, edx div ebx push dx ; 输出转换后的十六进制 mov eax, 4 mov ebx, 1 mov ecx, output_msg mov edx, 28 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit1: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit2: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit3: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit4: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 pop dx add dl, '0' cmp dl, '9' jbe output_digit add dl, 7 output_digit5: mov eax, 4 mov ebx, 1 mov ecx, dl mov edx, 1 int 0x80 ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 上述代码使用了 Linux 下的系统调用来进行输入和输出操作。程序首先输出提示信息,然后读取输入的十进制。接下来,程序使用除法运算将输入的十进制转换为十六进制,并将每一位压入栈中。然后,程序从栈中弹出每一位,并将其转换为字符输出。最后,程序退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值