汇编语言:十进制转十六进制(子程序设计)

该程序使用汇编语言编写,实现了从键盘接收十进制数,然后将其转换为十六进制并显示的功能。程序包含readchar和convert两个子函数,readchar用于读取用户输入的十进制数,convert则负责将十进制数转换为十六进制并输出。程序通过循环读入和累加的方式得到十进制数,再通过位移和逻辑运算将其转换成十六进制格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

编写十进制到十六进制转换程序。要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来

设计思路

设计子函数readchar用于读入操作,利用循环语句input进行循环读入,对读入的每一个字符进行判断,若读入字符在’0’-'9’之外,则结束输入,且每一次输入后将前一次输入的总和×10。设计子函数convert用于将bx中保存的10进制数字转化为16进制并输出。

程序代码

assume cs:code,ds:data

data segment
   str1 db 0AH,'Input decimal number: ','$' 	 
   str2 db 0AH,'hexadecimal number: ','$' 
data ends

code segment
start:
    mov ax,data
    mov ds,ax
main:
    call readchar
    call convert
    mov ah,4ch
    int 21h
readchar proc near:    ;读入函数
    lea dx,str1
    mov ah,09
    int 21h
    mov bx,0
  input:                   
    mov ah,01h
    int 21h
    cmp al,'9'        ;输入数字之外的字符,就结束输入
    ja exit
    cmp al,'0'
    jb exit
    sub al,'0'        ;把字符转换为数字
    mov ah,0h    ;避免ah数值的影响
    mov dx,ax
    mov ax,bx
    mov bx,dx
    mov cx,0ah
    mul cx           ; 把之前输入的数乘以10,加上本次输入,保存到bx
    mov dx,ax
    mov ax,bx
    mov bx,dx
    add bx,ax
    jmp input

    exit:
    ret
readchar endp

convert proc near:    ;转换函数
    lea dx,str1
    mov ah,09
    mov ch,04h
  loopc:
    mov cl,04h
    rol bx,cl
    mov al,bl
    and al,0fh
    add al,30h
    cmp al,'9'       
    jbe printf        ;字符为'9'之下,直接显示。
    add al,07h        ;大于9的数字转换为'A'-'F'

  printf:
    mov dl,al
    mov ah,2
    int 21h
    dec ch
    jne loopc         ; 单独用ch进行循环操作
    ret
convert endp

code ends
    end start

运行结果:

在这里插入图片描述

### 创建十进制十六进制程序 #### 实现思路 对于十进制十六进制的操作,基本原理在于不断地将给定的十进制数值除以16并记录每次得到的余数。当商最终变为0时,所获得的一系列余数即代表了目标十六进制数位上的值,只是顺序相反需逆序排列[^1]。 而对于十六进制十进制的过程,则是对每一位字符乘以其对应的权重(即$16^n$, n表示该位相对于最低有效位的位置),并将这些加权后的值累加以得出原始的十进制数值[^2]。 #### C++代码实例:十进制十六进制 下面展示一段简单的C++代码用于完成上述功能: ```cpp #include <iostream> #include <string> std::string dec_to_hex(int num){ std::string hex = ""; char digits[] = "0123456789ABCDEF"; do { int remainder = num % 16; hex = digits[remainder] + hex; // 将当前余数作为新字符串前缀 num /= 16; } while (num != 0); return hex.empty() ? "0" : hex; } int main(){ int decimalNumber; std::cout << "请输入要转换十六进制十进制数:" ; std::cin >> decimalNumber; if(decimalNumber<0){ // 处理负数情况 std::cout<<"结果为: -"<<dec_to_hex(-decimalNumber)<<'\n'; } else{ std::cout<<"结果为:"<<dec_to_hex(decimalNumber)<<'\n'; } return 0; } ``` 这段代码实现了从用户输入获取一个整型变量`decimalNumber`, 并调用函数`dec_to_hex()`将其转换为相应的十六进制形式输出。 #### C++代码实例:十六进制十进制 同样地,在反向操作中,可以通过遍历每一个十六进制字符来构建其等价的十进制表达式: ```cpp #include <iostream> #include <cmath> long long hex_to_dec(const std::string& strHex){ long long result=0; for(size_t i=0;i<strHex.length();++i){ char ch=strHex[i]; int value=(ch>='A'&&ch<='F')?(ch-'A'+10):(isdigit(ch)?(ch-'0'):0); result+=value*static_cast<int>(pow(16,strHex.length()-i-1)); } return result; } int main(){ std::string hexadecimalString; std::cout << "请输入要转换十进制十六进制:"; std::cin>>hexadecimalString; std::cout<< "结果为:" << hex_to_dec(hexadecimalString)<<"\n"; return 0; } ``` 此部分展示了如何解析由字母和数字组成的十六进制字符串,并通过逐位处理的方式计算出它们共同构成的实际十进制数值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值