汇编实现从键盘上输入4位十六进制数输出对应的十进制数用子程序怎么

2025-05-23 14:24:14
推荐回答(4个)
回答1:

assume cs:code
code segment
start:
  call readHex
  call print
  mov ah,4ch
  int 21h
;print (ax) in decimal
print proc near
  xor cx, cx
  mov bx, 10
Q0:
  xor dx, dx
  div bx
  xor dx, 0e30H
  push dx
  inc cx
  cmp ax, 0
  jnz Q0
Q1:
  pop ax
  int 10h
  loop Q1
  ret
print endp

;read a Hex number (16bit)
;输入数据存储在ax中返回
;不做输入数据有效性检查
readHex proc near
  mov cx,0404h
  mov bx,0
  mov ah,1
L0:
  int 21h
  cmp al,'F'
  ja L1
  cmp al,'9'
  ja L2
  jmp L3
L1:
  sub al,20H
L2:
  sub al,7H
L3:
  sub al,30H

  shl bx,cl
  or bl,al
  dec ch
  jnz L0
;
  mov ah,0eh
  mov al,0dh
  int 10h
  mov al,0ah
  int 10h

  mov ax, bx
  ret
readHex endp

code ends
end start

回答2:

;输入4位16进制数,将其以10进制的形式显示
        CODE  SEGMENT
              ASSUME    CS:CODE
              ORG       100H
      START:
              JMP       BBB
         MSG  DB        10,13,'please input a number(hex):','$'
          T1  DB        0,1,2,3,4,5,6,7,8,9
              db        10,10,11,11,12,12,13,13,14,14,15,15
          T2  db        '0123456789aAbBcCdDeEfF'

        BBB:
              PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              LEA       DX,MSG
              MOV       AH,9
              INT       21H
              ;----------------------
              MOV       AX,0
              MOV       CX,4
              PUSH      AX
         @0:
              MOV       AH,1
              INT       21H
              LEA       SI,T2
              LEA       DI,T1
         @1:  CMP       AL,[SI]
              JE        @2
              INC       SI
              INC       DI
              JMP       @1
         @2:  MOV       AL,[DI]
              MOV       AH,0
              MOV       SI,AX
              POP       AX
              MOV       BL,16
              MOV       BH,0
              MUL       BX
              ADD       AX,SI
              PUSH      AX
              LOOP      @0
      LINE0:
              POP       AX
              CALL      DISPNUM
              ;-------------------------
              MOV       AH,4CH
              INT       21H

;  显示十进制整型数值子程序
     DISPNUM  PROC      NEAR
    ;   将要显示的数据放入AX中
              JMP       DISPSUB
           Y  DB        10,13,0,0,0,0,0,'$'
    DISPSUB:  MOV       DX,0
              MOV       BX,10
              DIV       BX
              MOV       BYTE PTR[Y+6],DL        ;保存个位
              MOV       DX,0
              DIV       BX
              MOV       BYTE PTR[Y+5],DL        ;保存十位
              MOV       DX,0
              DIV       BX
              MOV       BYTE PTR[Y+4],DL        ;保存百位
              MOV       DX,0
              DIV       BX
              MOV       BYTE PTR[Y+3],DL        ;保存千位
              MOV       BYTE PTR[Y+2],AL        ;保存万位
              ;------------------------
              MOV       AL,BYTE PTR[Y+2]
              ADD       AL,30H      ;万位转ASC2
              MOV       BYTE PTR[Y+2],AL
              ;---------------------------
              MOV       AL,BYTE PTR[Y+3]
              ADD       AL,30H      ;千位转ASC2
              MOV       BYTE PTR[Y+3],AL
              ;---------------------------
              MOV       AL,BYTE PTR[Y+4]
              ADD       AL,30H      ;百位转ASC2
              MOV       BYTE PTR[Y+4],AL
              ;--------------------------
              MOV       AL,BYTE PTR[Y+5]
              ADD       AL,30H      ;十位转ASC2
              MOV       BYTE PTR[Y+5],AL
              ;---------------------------
              MOV       AL,BYTE PTR[Y+6]
              ADD       AL,30H      ;个位转ASC2
              MOV       BYTE PTR[Y+6],AL
              ;-----------------------------
              MOV       DI,1
      DISP1:
              INC       DI
              CMP       DI,6
              JE        DISPEXIT
              CMP       BYTE PTR[Y+DI],'0'
              JNE       DISPEXIT
              MOV       BYTE PTR[Y+DI],' '
              JMP       DISP1
   DISPEXIT:
              MOV       AH,9
              LEA       DX,Y
              INT       21H
              RET
     DISPNUM  ENDP

        CODE  ENDS
              END       START

回答3:

是那种汇编,win32汇编还是8080,要用控制台还是窗口界面输出

回答4:

原则:0-9对应0-9,ABCDEF对应10,11,12,13,14,15
设计思路:
1、读取输入控件(或Interbox)的数字,并以&H(十六进制)的integer类型保存;
2、调用 &O(十进制);
3、输出数据。