精华内容
下载资源
问答
  • 十六进制数左移四位
    2020-10-21 19:32:05

    显示四位十六进制数的程序。
    我们以数据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

    更多相关内容
  • 十六进制左移

    千次阅读 2020-04-17 10:09:16
  • 思路是,循环输入字符并将其转换为真实的数值(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

    展开全文
  • 输入两位十六进制数,输出其十进制值 题目: 输入:ff 输出:255 输入:12 输出:018 (默认字符为小写) 代码 stack segment stack ends data segment string_1 db 'please input a num: $' string_2 db 0ah,0dh,'...

    输入两位十六进制数,输出其十进制值

    题目:
    输入:ff
    输出:255

    输入:12
    输出:018
    (默认字符为小写)

    方法一

    代码

    stack segment 
    stack ends
    
    data segment
    string_1 db 'please input a num: $'
    string_2 db 0ah,0dh,'the result is : $'
    result db 0,0,0  ;30分别用来存储转换10进制后的值 因为最大为255 所以有三位  
    data ends
    
    code segment
    assume cs:code,ds:data,ss:stack
    start:
    
    mov ax,data
    mov ds,ax
    
    ;显示提示语句
    lea dx,string_1
    mov ah,09h
    int 21h
    
    ;从键盘上读第一个字符
    mov ah,01h
    int 21h
    
    ;先减去30h 再判断是数字 还是a~f
    sub al,30h
    
    cmp al,10
    jb shuzi ;是数字 跳转
    
    ;是字母a~f 则还要再减去27h
    sub al,27h
    
    mov cl,4
    shl al,cl ;左移4位,相当于乘以16
    mov bl,al
    jmp in_2
    
     shuzi:
    mov cl,4
    shl al,cl
    mov bl,al
    
    ;输入第二个字符
    in_2:
    mov ah,01h
    int 21h
    
    sub al,30h
    cmp al,10
    jb shuzi_2
    
    sub al,27h
    add bl,al
    jmp change
    
    
    shuzi_2:
    add bl,al
    
    ;开始进制转换
    change:
    mov bh,0
    mov ax,bx
    
    mov bx,offset result+2
    mov cx,3
    mov si,10
    
    ;转换方法就是 循环除以10 得到每个位置的数 
    ;比如255 255%10=5 25%5=5 2%5=2 这样就把255分成了2 5 5do:
    div si
    mov [bx],dl
    mov dx,0 ;因为除以的是si 16位的,所以被除数为32位,就是高16位为dx,低16位为ax,但dx会用来存余数,所以需要及时对dx清零
    dec bx
    mov ah,0
    loop do
    
    
    ;显示结束语句
    lea dx,string_2
    mov ah,09h
    int 21h 
    
    
    mov bx,offset result
    mov cx,3
    
    shuchu:
    mov dl,[bx]
    add dl,30h
    mov ah,02h
    int 21h
    inc bx
    loop shuchu
    
    mov ax,4c00h
    int 21h
    
    code ends
    end start
    

    结果
    在这里插入图片描述
    改进版

    stack segment
    db 10 dup(?)
    stack ends
    
    data segment
    string_1 db 'please input a num: $'
    string_2 db 0ah,0dh,'the result is: $'
    result db 0,0,0
    data ends
    
    code segment
    assume cs:code,ss:stack,ds:data
    start:
    mov ax,data
    mov ds,ax
    
    lea dx,string_1
    mov ah,09h
    int 21h
    
    mov cx,2
    
    
    xor bl,bl
    input:
    push cx
    mov cl,4
    mov ah,01h
    int 21h
    shl bl,cl
    sub al,30h
    cmp al,10
    jb shuzi
    sub al,27h
    
    
    shuzi:
    add bl,al
    pop cx
    loop input
    
    
    mov bh,0
    mov ax,bx
    
    mov bl,10
    mov cx,3
    mov si,offset result+2
    
    change:
    div bl
    mov [si],ah
    dec si
    mov ah,0
    loop change
    
    lea dx,string_2
    mov ah,09h
    int 21h
    
    mov cx,3
    mov si,offset result
    output:
    mov dl,[si]
    add dl,30h
    mov ah,02h
    int 21h
    inc si
    loop output
    
    mov ax,4c00h
    int 21h
    
    code ends
    end start
    

    方法二:

    DATAS SEGMENT
        bin dw 10 dup(?)    ;存放二进制结果
        buf db 5 dup(?)      ;存放十进制数 各个数位上的数值 如100,存放为 1,0,0
        msg1 db 'please input a hex number',13,10,'$'
        msg2 db 'the dec number:',13,10,'$'
        crlf db 13,10,'$'    ;回车换行
    DATAS ENDS
    
    stack segment
    db 10 dup(?)
    stack ends
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS
      mov cx,2
    
    START:
    push cx
        MOV AX,DATAS
        MOV DS,AX
        
           mov bx,0        ;初始化bx
           
           LEA dx,msg1        ;输出提示字符串
           mov ah,9
           int 21h
           
     input:
           mov ah,1        ;输入一个字符
           int 21h
           
           sub al,30h        ;把al中的ascii码转换成数值
           jl init
       
           cmp al,10        ;输入的数在0-9之间跳转
           jl toBin
           
           sub al,27h        ;再转换为a-f
           cmp al,0ah        ;输入的字符比a小
           jl init            ;结束输入
           cmp al,10h        ;输入的字符比f大
           jge init        ;结束输入
           
      toBin:            ;转换为二进制,把输入组合成意义上的数值
           mov cl,4        
           shl bx,cl        ;bx左移4位
           mov ah,0        
           add bx,ax        ;把输入后并从ascii码转换来的值与bx相加
           mov bin,bx        ;转换成二进制数后存到内存bin
           jmp input        ;继续输入
           
      init:                ;初始化,准备转换
          mov ax,bin        
          mov bx,10        
          mov si,4        ;循环四次,最大到万位
          
      toDec:            ;转为各个数位上的数值,如100转换为1,0,0 百位为1...
          mov dx,0        
          div bx            ;10法得到各个位上的数值
          mov [buf+si],dl    ;余数为该位上的值,第一次循环为个位,第二次为十位...;存到内存中
          dec si            
          cmp ax,0        ;商是否为0,为0算法结束
          ja toDec
      
    
          lea dx,crlf            ;显示提示
          mov ah,9
          int 21h
          lea dx,msg2
          mov ah,9
          int 21h
          
      output:                ;输出内存中存放的各个数位上的数值
          inc si
          mov dl,[buf+si]
          add dl,30h            ;转为ascii
          mov ah,2
          int 21h
          cmp si,4
          jb output
    mov cx,0
    pop cx
     loop START
       
       MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
    

    总结

    1. 计算机存储数据其实是以二进制数存储的,但是在debug模式下,我们看到的数都是以十六进制显示。
    2. 键盘输入其实存储的是对应的ASCII值,比如输入:f 其实存的是:66h
    3. 为了使输入:f 计算机存储的也是f,需要-57h 如果是数字的话,需要 -30h
    4. 这里是两位十六进制的数,输入一个字符后,在最后计算结果的时候,其实是第一个字符乘以16再加上第二个字符,在计算机中,乘以十六,相当于左移四位。所以在这里我的方法是:获得第一个字符后,左移四位,在与第二个字符进行相加。得到的就是我们需要的。
    5. 输出也是需要ASCII值,记得+30h
    6. div的用法需要搞清楚
    展开全文
  • 给定一个整数,编写一个算法将这个转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。如果要转化的为0,那么以...
  • publicclassJZTurn {publicstaticvoidmain(String[] args) {...System.out.println("十进制数:"+num2);System.out.println("十进制转换二进制:"+turn2(num2));System.out.println("十进制转换八进制:"+turn8(num2))...
  • 用汇编实现二进制十六进制数的相互转换

    千次阅读 多人点赞 2020-08-03 16:50:13
    用汇编实现二进制十六进制数的转换 一、实现功能 1)实现二进制十六进制数的转换 2)实现十六进制数向二进制的转换‘ 二、设计分析       汇编语言中,字符在机器中都是以ascii码的二进制...
  • C语言 · 十六进制转十进制

    千次阅读 2021-05-23 06:10:49
    问题描述 从键盘输入一个不超过8的正的十六进制数字符串,将它转换为正的十进制后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 65535 思路:感觉自己的下面两个方法...
  • 十六进制的加、减、乘、除、左移、右移计算

    万次阅读 多人点赞 2019-09-25 19:09:37
    十六进制的计算方法和十进制差不多,十进制是满十进一,那么十六进制一样,满十六进一,不够时向前一借一,具体可参考以下几个例子边便能清楚的了解了: 一、十六进制的加法 比如我们随便列举2个十六进制相加:...
  • 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...
  • 从键盘输入两位十六进制数,转化成十进制输出 示例: 输入:10 输出:16 输入:ed 输出:237 输入:egd 输出:237 题目分解 首先我们需要从键盘输入两个16进制,思考两个十六进制数该如何写入;其次,我们要将...
  • 二进制是在计算机中使用最多的进制,八进制和十六进制都是基于二进制的,3二进制组成1八进制,4二进制组成1位十六进制数,所以二进制,八进制,十六进制互相转换很方便。2.种方式表示整数十进制...
  • 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一减,就是低四位的值
  • 进制转换与运算

    2021-05-23 06:09:16
    0进制转换和运算计算机中存储单位什么是bitbit是计算机中最小的信号但愿,可以表示高电平或者低电平。以二进制“001”为例, 每一都是一个bit。二进制只能由0/1组成,所以正好可以表示bit。什么是byte1个bit只能...
  • 给定一个整数,编写一个算法将这个转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。如果要转化的为0,那么以...
  • 一、&都为1时才为1 9&2 9:1001 2:10,补0为0010 故结果为0 ...六、10进制转换为十六进制 16进制即逢16进1,每一上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F.
  • 汇编语言将十进制字符串转为十六进制

    千次阅读 多人点赞 2021-10-19 23:39:02
    汇编语言将十进制字符串转为十六进制 Author:Em1ya Part1:Str to hex 基本思路:将10进制字符串的每一个字符提出,减去0x30转化该...先将该右移至最低的十六进制位为我们想要提取的 所以,对于倒数第i项(i从0
  • java十进制转为十六进制

    千次阅读 2021-03-12 11:00:05
    //如何将一个0~255范围内的整数转换为十六进制值,例如60的十六进制表示形式3C public interface TenToSixteen { public static void main(String[] args) { //自动转换 String s1 = Integer.toBinaryString(76); ...
  • "操作,然后再左移4,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。2、十六进制转二进制字节时,将十六进制字符对应的十...
  • 二进制、十进制、十六进制理解

    万次阅读 2020-10-21 11:23:12
    1.如何理解二进制、十进制、十六进制 点击查看原文 1.1 十进制的理解: 生活中我们遇到的绝大部分数据都是十进制的,比如7、24、30、365等,如果把它们按照个、十、百位分解,可以这样表示: 数值 ...
  • 用C语言实现十进制到二进制、八进制、十六进制的转换,并实现基本的加法运算。 任务:编程实现以下功能 十进制转换二进制输出 输入两个十进制整数a和b。将这两个十进制a、b转换成二进制,保存并将这两个二...
  • 表示某一位置上的,运算时是逢X进一。 十进制是逢十进一;二进制是逢二进一,八进制是逢八进一; 常见进制:二进制,八进制,十进制,十六进制; 学习进制的原因:计算机数据在底层运算时,都是以二进制形式...
  • 输入一个最大长度为4的十六进制数,将其转换成10进制输出。 其中我们需要检测十六进制输入的正确性,比如大小写、特殊字符和数字的判断。 解决方式 程序分为两个部分,首先是处理我们的输入,以及通过除法计算十进制...
  • 一、表示方法 1、八 进制 定义: ...2、十六 进制 定义: 它由 0-9,A-F 组成,字母不区分大小写。与 10 进制的对应关系是: 0-9 对应0-9; A-F 对应 10-15。 N进制可以用 0~(N-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...
  • First of all please give me an advice why we need them during storing information计算机以二进制形式存储有时我们根据存储的实际进行思考是有用的,在这种情况下,我们熟悉的十进制系统可能有点尴尬(因为转换...
  • 转为ascii mov ah,2 int 21h cmp si,4 jb output mov ah,1 int 21h MOV AH,4CH INT 21H CODES ENDS END START #***********Python代码********* 把十六进制的字串转为十进制数字: >>> print int('ff', 16) 把十进制...
  • 最全操作符详解即二进制,八进制,十进制,十六进制代码转换

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,374
精华内容 4,949
热门标签
关键字:

十六进制数左移四位