精华内容
下载资源
问答
  • 设置四位十六进制数已经存放在AX存储器中。对四位十六进制数进行逐位显示,由于每位显示的过程是相同的采用子程序结构进行编程。 STACK1 SEGMENT STACK ;堆栈段 DW 256 DUP(?) STACK1 ENDS DATA SEGMENT ;数据段 ...

    显示四位十六进制数的程序。
    我们以数据0A490H为例。
    (1)明确任务,确定算法
    设置四位十六进制数已经存放在AX存储器中。对四位十六进制数进行逐位显示,由于每位显示的过程是相同的采用子程序结构进行编程。将四位十六进制数分解成两位显示,再把两位十六进制数分解成一位显示。这样,显示四位十六进制的子程序调用显示成两位十六进制数的子程序,显示两位十六进制数的子程序调用显示一位十六进制数的子程序。
    STACK1 SEGMENT STACK ;堆栈段
    DW 256 DUP(?)
    STACK1 ENDS
    DATA SEGMENT ;数据段
    DATA1 DW 0A490H
    DATA ENDS
    CODE SEGMENT ;代码段
    ASSUME CS:CODE,DS:DATA
    START: MOV AX,DATA
    MOV DS,AX ;设置 DS 寄存器
    MOV AX,DATA1
    CALL DISP4 ;调用子程序DISP4
    INT 20H
    DISP4 PROC NEAR
    PUSH BX
    PUSH CX
    PUSH DX
    PUSH AX
    MOV AL,AH ;将AH赋值给AL
    CALL DISP2 ;调用子程序DISP2
    POP AX
    CALL DISP2
    POP DX
    POP CX
    POP BX
    RET
    DISP4 ENDP
    DISP2 PROC NEAR
    MOV BL,AL ;将AL的值赋给BL
    MOV DL,AL ;将AL的值赋给DL
    MOV CL,4
    ROL DL,CL ;循环左移4位
    AND DL,0FH ;DL和0FH相与
    CALL DISP1
    MOV DL,BL
    AND DL,0FH
    CALL DISP1 ;调用子程序DISP1
    RET
    DISP2 ENDP
    DISP1 PROC
    OR DL,30H ;DL的值和30H相加
    CMP DL,3AH ;DL的值和3AH比较
    JB DDD
    ADD DL,07H ;DL的值加07H
    DDD:
    MOV AH,2 ;显示字符
    INT 21H
    RET
    DISP1 ENDP
    CODE ENDS
    END START

    (2)同理,显示两位十六进制数的程序,以数据0A4H为例。
    STACK1 SEGMENT STACK
    DW 256 DUP(?)
    STACK1 ENDS
    DATA SEGMENT
    DATA1 DW 0A4H
    DATA ENDS
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START: MOV AX,DATA
    MOV DS,AX
    MOV AX,DATA1
    CALL DISP2
    INT 20H
    DISP2 PROC NEAR
    MOV BL,AL
    MOV DL,AL
    MOV CL,4
    ROL DL,CL
    AND DL,0FH
    CALL DISP1
    MOV DL,BL
    AND DL,0FH
    CALL DISP1
    RET
    DISP2 ENDP
    DISP1 PROC
    OR DL,30H
    CMP DL,3AH
    JB DDD
    ADD DL,07H
    DDD:
    MOV AH,2
    INT 21H
    RET
    DISP1 ENDP
    CODE ENDS
    END START

    展开全文
  • 思路是,循环输入字符并将其转换为真实的数值(0-9的ASCII码减去30H,a-f的ASCII码减去57H)分别存入内存,再循环将这些组合成想要的十进制数(用移位的方式实现,例:0001左移四位变为10000,变为原来的16倍),...

    程序运行效果如下:
    在这里插入图片描述
    如题,程序可以实现四位十六进制数转换为十进制数
    思路是,循环输入字符并将其转换为真实的数值(0-9的ASCII码减去30H,a-f的ASCII码减去57H)分别存入内存,再循环将这些数组合成想要的十进制数(用移位的方式实现,例:0001左移四位变为10000,变为原来的16倍),以循环除以10取余的方式得到各位上的结果,逐位输出。
    具体代码如下:

    DATAS SEGMENT
            TWO DW 10 DUP(?)         ;存放二进制数
            TEN DB 5 DUP(?)      ;存放十进制数
            MSG1 DB 'Please input a hex number',13,10,'$'
            MSG2 DB 'The dec number:',13,10,'$'
            CRLF DB 13,10,'$'
    DATAS ENDS
    CODES SEGMENT
            ASSUME CS:CODES,DS:DATAS
    START:
            MOV AX,DATAS
            MOV DS,AX
            MOV BX,0
            LEA DX,MSG1
            MOV AH,9
            INT 21H
    INPUT:
            MOV AH,1
            INT 21H
            SUB AL,30H
            CMP AL,0
            JL INIT
            CMP AL,10
            JL TOBIN
            SUB AL,27H
            CMP AL,0AH
            JL INIT
            CMP AL,10H
            JGE  INIT
    TOBIN:
            MOV CL,4
            SHL BX,CL
            MOV AH,0
            ADD BX,AX
            JMP INPUT
    INIT:
            MOV AX,BX
            MOV BX,10
            MOV SI,4
    TODEC:
            MOV DX,0
            DIV BX
            MOV [TEN+SI],DL 
            DEC SI
            CMP AX,0
            JNBE TODEC
            LEA DX,CRLF
            MOV AH,9
            INT 21H
            LEA DX,MSG2
            MOV AH,9
            INT 21H
    OUTPUT:
            INC SI
            MOV DL,[TEN+SI]
            ADD DL,30H
            MOV AH,2
            INT 21H
            CMP SI,4
            JNE OUTPUT
            MOV AH,4CH
            INT 21H
    CODES ENDS
     END START
    

    思路参考文章:https://www.cnblogs.com/Zhang-Shangyu/p/5152393.html

    展开全文
  • 十六进制左移

    千次阅读 2020-04-17 10:09:16
  • 用汇编实现二进制十六进制数的转换 一、实现功能 1)实现二进制十六进制数的转换 2)实现十六进制数向二进制的转换‘ 二、设计分析       汇编语言中,字符在机器中都是以ascii码的二进制...

    用汇编实现二进制数向十六进制数的转换

    一、实现功能

    1)实现二进制数向十六进制数的转换
    2)实现十六进制数向二进制数的转换‘

    二、设计分析

          汇编语言中,字符在机器中都是以ascii码的二进制格式存储,但是汇编语言写的时候常用十六进制,因此需要好好看看ascii码的十六进制表。

         特别是进制转换一定要注意,机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作。

          四位二进制数对应一位十六进制数,这里写的也是四位二进制和一位十六进制之间的的转换

    • 实现四位二进制数向十六进制数的转换

    1. 先输入四位的二进制数,每输入一位二进制数就判断输入的时0还是1,即将该数和30H做比较。
    2. 将DL赋值为0。如果输入的数是0,则将DL和0进行或运算(也可以不进行逻辑运算直接移位),将DL的最后一位置为0;如果输入的数是1,则将DL和1进行或运算,将DL的最后一位置为1。然后将DL向左移一位。进行4次循环,级输入4为二进制数。四位输入完毕后,DL就得到输入数的二进制。
    3. 判断DL是否在0-9之间,如果在则ADD DL,30H;如果大于0-9,则ADD DL,37H。(注意输出的字符的值是不等于机器中存放的二进制的值,因此需要进行加法)最后输出对应的16进制的ascii码的值。如果小于0-9则JMP到程序开始重新输入功能序号。
    4. 二进制转十六进制的流程图:
    • 实现一个十六进制数向二进制数的转换

    1. 先输入一个16进制数,判断输入字符的ascii码在30H-39H(0-9)之间,还是在41H-46H(A-F)之间,或者是在61H-66H(a-f)之间。如果是第一种情况则SUB DL,30H,如果是第二种情况则SUB DL,37H,如果是第三种情况则SUB DL,57H。即可得到输入的十六进制数的值,而不是字符的ascii码的值。
    2. 最后需要将DL中的值以二进制输出,因为机器里存放的就是以二进制存放。这里我用循环左移的方式,从二进制的高位到低位一次循环打印。将循环左移一位后的数与1进行与运算,得到最低位的大小(也就是当前准备输出的位置的大小),然后加上30H,得到0/1的ascii码值,依次将DL的值进行输出。
    3. 需要注意,第2步进行与运算的时候不能再原来的寄存器上进行,否则只能得到一位二进制数,后面几位都没法求了。
    4. 一个十六进制数向二进制数的转换流程图:
      在这里插入图片描述

    三、设计分析

    四位二进制数向十六进制数的转换

    DATA SEGMENT
    	TIP DB 'INPUT THE NUMBER: ','$'
    	TIP1 DB '  <=>  ','$'
    DATA ENDS
    
    CODE SEGMENT
    	ASSUME CS:CODE,DS:DATA
    START:
    	MOV AX,DATA
    	MOV DS,AX
    	LEA DX,TIP
    	MOV AH,09H
    	INT 21H
    	MOV CH,4
    	MOV DL,0
    INPUT:
    	MOV AH,1
    	INT 21H
    	CMP AL,30H
    	JA L1              ;输入的是1
    	ROL DL,1
    	OR DL,0
    	JMP AGAIN
    L1:	
    	ROL DL,1
    	OR DL,1
    AGAIN:
    	DEC CH
    	JZ PRINT
    	JMP INPUT
    PRINT:
    	CMP DL,0
    	JB EXIT
    	CMP DL,9
    	JA COMPER1
    	ADD DL,30H
    	JMP HEN
    COMPER1:
    	ADD DL,37H
    HEN:
    	MOV AL,DL
    	LEA DX,TIP1
    	MOV AH,09H
    	INT 21H
    	MOV DL,AL 
    	MOV AH,02H
    	INT 21H
    EXIT:
    	MOV AH,4CH
    	INT 21H
    CODE ENDS
    END START
    

    实现一个十六进制数向二进制数的转换

    DATA SEGMENT
    	TIP DB 'INPUT THE NUMBER: ','$'
    	TIP1 DB '  <=>  ','$'
    DATA ENDS
    
    CODE SEGMENT
    	ASSUME CS:CODE,DS:DATA,SS:STACK
    START:
    	MOV AX,DATA
    	MOV DS,AX
    	LEA DX,TIP
    	MOV AH,09H
    	INT 21H
    INPUT:
    	MOV AH,1
    	INT 21H
    	CMP AL,30H
    	JB EXIT
    	CMP AL,39H
    	JA COMPER1
    	JMP CHANGE1    ;0~9之间
    COMPER1:
    	CMP AL,41H
    	JB EXIT
    	CMP AL,46H
    	JA COMPER2
    	JMP CHANGE2    ;在A-F之间
    COMPER2:
    	CMP AL,61H
    	JB EXIT
    	CMP AL,66H
    	JA EXIT
    	JMP CHANGE3    ;在a~f之间
    
    CHANGE1:
    	SUB AL,30H
    	JMP ENT
    CHANGE2:
    	SUB AL,37H
    	JMP ENT
    CHANGE3: 
    	SUB AL,57H
    	JMP ENT
    ENT:
    	LEA DX,TIP1
    	MOV AH,09H
    	INT 21H
    	MOV CH,8
    	MOV BL,AL	
    PRINT:	
    	ROL BL,1
    	MOV DL,BL
    	AND DL,1
    	ADD DL,30H
    	MOV AH,02H
    	INT 21H
     	DEC CH
    	JZ EXIT
    	JMP PRINT
    EXIT:
    	MOV AH,4CH
    	INT 21H
    CODE ENDS
    END START
    
    展开全文
  • 二进制是每4位为一个十六进制的一位,每次与15为了拿出后四位的数字,再对照字符数组填值,这里无线程安全问题,采用了StringBuilder,最后再用reverse方法反转。 值得一提的是>>、<<、>>>分别...
  • 405. 数字转换为十六进制数 给定一个整数,编写一个算法将这个转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的...
  • 给定一个整数,编写一个算法将这个转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。如果要转化的为0,那么以...
  • 给定一个整数,编写一个算法将这个转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 LeetCode405 数字转换为十六进制数 class Solution { public: string getChar(int a){//大于等于10的话10对应a,...
  • 从键盘输入两位十六进制数,转化成十进制输出 示例: 输入:10 输出:16 输入:ed 输出:237 输入:egd 输出:237 题目分解 首先我们需要从键盘输入两个16进制,思考两个十六进制数该如何写入;其次,我们要将...
  • 输入两位十六进制数,输出其十进制值 题目: 输入:ff 输出:255 输入:12 输出:018 (默认字符为小写) 代码 stack segment stack ends data segment string_1 db 'please input a num: $' string_2 db 0ah,0dh,'...
  • 十六进制的加、减、乘、除、左移、右移计算

    万次阅读 多人点赞 2019-09-25 19:09:37
    十六进制的计算方法和十进制差不多,十进制是满十进一,那么十六进制一样,满十六进一,不够时向前一借一,具体可参考以下几个例子边便能清楚的了解了: 一、十六进制的加法 比如我们随便列举2个十六进制相加:...
  • 给定一个整数,编写一个算法将这个转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。如果要转化的为0,那么以...
  • 下面展示一些 内联代码片。...//a的最低位左移12赋值给b b += (a & 0X00F0) << 4; //a的倒数第二位左移4并与b相加赋值给b b += (a & 0X0F00) >> 4;//a的倒数第三右移4并与b相加赋
  • BX左移四位 OR BL,AL  DEC CH  JNZ L1    mov dl,0dh;回车  int 21h  mov dl,0ah;换行  mov ah,2  int 21h    MOV CX,0010H;循环十六次 R:;左移是'1'判断是还是'0'  SHL BX,1...
  • CODE SEGMENT ASSUME CS:CODE START: mov bx,0 mov ch,4 ...键盘输入4个16进制数 int 21h cmp al,39h ;判断是0~9还是A~H,若是数字减30H,否则还要减07H jbe next sub al,07h next: sub al,30h shl bx...
  • 刚接触汇编,很多细节搞得还不是很清楚,写了一个十进制和十六进制之间相互...然后循环左移(只处理4次),取后四位,也就是相当于/16 最后输出字符。(16->10)类似处理,先转换成10进制(每次*16),最后依...
  • int类型的数字转换为十六进制数

    千次阅读 2020-03-22 14:59:08
    string toHex(int num) { if(num == 0) return "0"; string res = ""; string hex[16] = {"0", "1", "2", "3", "4", "5", "6... //num2先右移4位,再左移4位,即相当于将低4位置0,再用原来的num2一减,就是低四位的值
  • 问题:键盘输入两个一十进制(有提示输入),编程计算他们的和,并将结果分别以二进制、十进制和十六进制的形式显示到CRT上。(扩展:做一个菜单,选1,2,3,4分别输出及退出) data segment menu db "1...
  • 显示十进制的算法:在汇编中我们可以将该除以10得到商和余数分别存到相应的容器中汇编提供了很多潜规则的指令1,在C中我们想到显示商和余数时,我们不得不写两行代码 ,一行得出商,一行得出余数。 1: a: 对于...
  • char *get16string(long num){ /*得到16进制形式的字符串*/ int i = 0; char *buffer = (char*)malloc(11); char *temp; buffer[0] = '0', buffer[1] = 'x', buffer[10] = '\0'; temp = buffer + 2;...
  • Java中二进制字节与十六进制互转

    万次阅读 2019-07-03 11:15:32
    “操作,然后再左移4,得到字节高位的十六进制A;将字节低位与0x0F做”&“操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。 2、十六进制转二进制字节时,将十六进制字符对应...
  • 示例 示例 1: 输入: 26 输出: "1a" 示例 2: 输入: -1 输出: "ffffffff" 解题 主要思路: 整型自动保存为补码形式,因此只要将整型二进制的每四位取出,对应到相应的十六进制数就行。要注意的是,C++中左移是逻辑...
  • “操作,然后再左移4,得到字节高位的十六进制A;将字节低位与0x0F做”&“操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。 2、十六进制转二进制字节时,将十六进制字符对应...
  • java的运算以及二进制和十六进制

    千次阅读 2018-11-08 11:35:37
    java的运算以及二进制和十六进制 一、二进制  计算机内部表示的字节长度是固定的,比如8,16,32。所以在高位补齐,java中字节码是8的,最高是符号,1个字节是八个二进制。此时从个开始计算2的幂...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,509
精华内容 4,203
关键字:

十六进制数左移四位