将数转化为二进制,并8位输出一个空格

// ttttttt.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
//char str[101];
int max(int x, int y) {
    return x > y ? x : y;
}
void print(int num,int index) {
    if (num == 0)
        return;
    print(num / 2, index + 1);
    if ((index+1)%8==0)
        printf(" ");
    printf("%d", num % 2);
    /*
    if (index==7)
        printf(" ");
        */
}
int main()
{
    /*
    printf("sizeof(int)=%d\n", sizeof(int));
    printf("sizeof(unsigned int)=%d\n", sizeof(unsigned int));
    printf("sizeof(long)=%d\n", sizeof(long));
    printf("sizeof(long long)=%d\n", sizeof(long long));
    printf("sizeof(unsigned long)=%d\n", sizeof(unsigned long));
    */
    unsigned long a;
    scanf("%ld", &a);
    print(a, 0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,需要使用中断 INT 21H 中的函数 01H 从键盘获取输入的字符,然后将字符转换为对应的数字或字母。接着,将每个字符转换成对应的四位二进制数,最后按照题目要求每四位输出一个空格显示二进制数。 以下是汇编语言的代码实现: ```assembly .model small .stack 100h .data inputMsg db 'Please enter a four-digit hexadecimal number:', '$' binaryMsg db 'The binary representation is: ', '$' buffer db 2 hex db 4 binary db 16 dup(0) .code main proc mov ax, @data mov ds, ax ; 输出提示信息 lea dx, inputMsg mov ah, 09h int 21h ; 获取键盘输入的十六进制数 lea dx, buffer mov ah, 01h int 21h ; 将字符转换为数字或字母 mov al, buffer sub al, 30h cmp al, 9 jbe convert sub al, 7 convert: mov bl, al mov al, hex shl al, 4 or al, bl ; 转换成二进制数 mov bl, al mov bh, 8 loop1: mov al, '0' div bh add al, '0' mov binary[bh-1], al dec bh cmp bl, 0 jne loop1 ; 输出二进制数 lea dx, binaryMsg mov ah, 09h int 21h mov bl, 0 loop2: mov al, binary[bl] mov ah, 02h int 21h inc bl cmp bl, 16 je exit cmp bl, 4 je space cmp bl, 8 je space cmp bl, 12 je space cmp bl, 16 jne no_space space: mov al, ' ' mov ah, 02h int 21h no_space: jmp loop2 exit: mov ah, 4ch int 21h main endp end main ``` 注意,上述代码仅适用于 DOS 系统。在 Windows 等其他操作系统中,中断调用方式和一些操作需要进行修改。 ### 回答2: 汇编语言是一种低级程序设计语言,通过编写汇编指令来控制计算机执行特定的操作。下面是一个汇编语言程序,用于从键盘输入一个四位的十六进制数,并将其转化二进制数并显示输出,每四位用一个空格隔开。 该程序的大致思路如下: 1. 从键盘输入四位的十六进制数。 2. 逐个处理输入的十六进制位,将其转化为对应的二进制位。 3. 在转化二进制后,输出相应结果,每四位用一个空格隔开。 汇编语言程序代码如下(使用x86汇编语法): ```assembly section .data inputMsg db '请输入一个四位的十六进制数: $' outputMsg db '转换后的二进制数为: $' binary db '0000 0000 0000 0000 $' ; 存储转换的二进制数 buffer db 5 ; 用于存储输入的十六进制数 newline db 0Ah, 0Dh ; 用于换行 section .text global _start _start: ; 输出提示信息 mov eax, 4 mov ebx, 1 mov ecx, inputMsg mov edx, 28 int 0x80 ; 读取用户输入 mov eax, 3 mov ebx, 0 mov ecx, buffer mov edx, 4 int 0x80 ; 转换为二进制 mov edi, 0 ; 计数器 mov esi, buffer ; 输入值缓冲区的地址 convert_loop: mov al, [esi] ; 读取一个字符到al寄存器 cmp al, 'A' ; 比较字符是否大于等于'A' jb convert_digit ; 若小于'A',则该字符是一个数字字符 sub al, 'A'-'9'-1 ; 否则将字符'A'-'F'映射为10-15 convert_digit: and al, 0Fh ; 将al寄存器的高4位置零 mov ah, 4 ; 每四位转换为一个二进制字符 shl al, ah ; 将al寄存器的低4位左移4位 mov ah, ' ' ; 添空格字符 mov [binary + edi], al ; 保存转换后的结果 mov [binary + edi + 1], ah ; 保存空格 inc edi ; 计数器1 add esi, 1 ; 输入值缓冲区的地址自增1 loop convert_loop ; 循环直到处理完所有的输入位 ; 输出转换后的二进制数 mov eax, 4 mov ebx, 1 mov ecx, outputMsg mov edx, 32 ; 4 * 8 + 3 = 35 = 32 + 3, 其中3是空格字符数量 int 0x80 ; 输出二进制数 mov eax, 4 mov ebx, 1 mov ecx, binary mov edx, 20 ; 每个二进制位4位(空格3位) int 0x80 ; 换行 mov eax, 4 mov ebx, 1 mov ecx, newline mov edx, 2 int 0x80 exit: ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 以上汇编程序会首先输出提示信息,要求用户输入一个四位的十六进制数,然后从键盘输入该数并存储在输入值缓冲区中。紧接着,程序会转换该十六进制数为对应的二进制数,并以每四位一个空格的形式输出。最后,会输出转换后的二进制数并换行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值