當前位置:編程學習大全網 - 編程語言 - 編寫壹匯編語言程序,要求從鍵盤接收壹個四位的十六進制數,並在終端上顯示與它等值的二進制數和十進制數

編寫壹匯編語言程序,要求從鍵盤接收壹個四位的十六進制數,並在終端上顯示與它等值的二進制數和十進制數

參考:

/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/a5fcfaf6a09cd93e730eeca8.html

;從鍵盤輸入四位16進制數,以2進制、10進制輸出

;=============================================

DATA SEGMENT

STR1 DB 'INPUT A HEX NUM: $'

HEX DB 5 ;計劃輸入的字符個數(含回車符)

NNN DB 0 ;存放實際輸入的字符個數

DB 5 DUP(?)

BIN DW ? ;輸入數字的二進制形式的存放單元

ERR DB 0AH, 0DH, ' ERROR !'

DB 0AH, 0DH, ' I HAVE NO TIME TO PLAY WITH YOU ! $'

STR2 DB 13, 10, 'BINARY IS: $'

DATA ENDS

;--------------------------------------------

STACK SEGMENT PARA STACK 'STACK'

DB 100 DUP(?)

STACK ENDS

;--------------------------------------------

CODE SEGMENT

ASSUME CS:CODE, SS:STACK, DS:DATA

START:

MOV AX, DATA

MOV DS, AX

MOV AX, STACK

MOV SS, AX

LEA DX, STR1 ;'INPUT A HEX NUM'

MOV AH, 9 ;顯示字符串

INT 21H

LEA DX, HEX

MOV AH, 10 ;等著輸入四位HEX數

INT 21H

;---------------------------------------

;下面進行轉換

MOV BIN, 0 ;先把二進制數字單元清零

LEA SI, HEX + 2;取輸入字符串的首地址

MOV CH, NNN ;取輸入字符的個數,用來控制循環處理的次數

CONV:

MOV BL, [SI] ;取來壹個字符

CMP BL, 0DH ;和回車符進行比較

JZ END0 ;是, 即結束

CMP BL, '0'

JB ERROR ;小於'0'轉移

CMP BL, 'F'

JA ERROR ;大於'F'轉移

CMP BL, '9'

JNA A2B ;不大於'9', 就去變換

CMP BL, 'A'

JNB A2B ;不小於'A', 就去變換

JMP ERROR ;其它符號都是錯誤

;---------------------------------------

A2B:

SUB BL, 30H ;ASC-->BIN

CMP BL, 10

JB A2B_END

SUB BL, 07H ;ASC-->BIN

A2B_END:

;---------------------------------------

MOV BH, 0 ;弄成16位數

PUSH CX

MOV AX, BIN ;把原來的數字乘以16

MOV CX, 16

MUL CX

ADD AX, BX ;加上新輸入的

MOV BIN, AX ;存結果,這就是二進制數

INC SI

POP CX

DEC CH ;處理次數減壹

JNZ CONV ;非零轉移

;---------------------------------------

DISP:

LEA DX, STR2 ;'BINARY IS: $'

MOV AH, 9 ;顯示字符串

INT 21H

;---------------------------------------

MOV AX, BIN ;取來數字

MOV CX, 16 ;顯示16位數

DDDD:

MOV DL, '0' ;先計劃顯示0

TEST AX, 8000H ;測試最高位

JZ DDD1

INC DL ;非0就顯示1

DDD1:

PUSH AX

MOV AH, 2 ;顯示DL中的ASCII碼

INT 21H

POP AX

SHL AX, 1 ;左移

LOOP DDDD ;CX-1,非零轉移

JMP END0 ;16位顯示完畢,轉到結束

;---------------------------------------

ERROR:

LEA DX, ERR

MOV AH, 09H ;錯誤信息提示

INT 21H

;---------------------------------------

END0:

MOV DL, 10

MOV AH, 2 ;顯示DL中的ASCII碼

INT 21H

MOV DL, 13

MOV AH, 2 ;顯示DL中的ASCII碼

INT 21H

;---------------------------------------

MOV AX, BIN ;取來數字

CALL DISP_AX

MOV AH, 4CH ;返回DOS

INT 21H

;------------------------------

DISP_AX:

MOV BX, 10 ;10進制.

MOV CX, 5 ;5位.

ABC:

MOV DX, 0

DIV BX

PUSH DX ;保存余數

LOOP ABC

MOV CX, 5 ;顯示5位.

ASD:

POP DX

CMP DL, 10

JB A48

ADD DL, 7

A48:

ADD DL, 48

MOV AH, 2

INT 21H ;輸出.

LOOP ASD

RET

;------------------------------

CODE ENDS

;---------------------------------------

END START

;=============================================

程序執行效果如下:

c:\masm510>H_BD

INPUT A HEX NUM: D4A2

BINARY IS: 1101010010100010

54434

c:\masm510>

  • 上一篇:哪些人不適合學計算機?
  • 下一篇:永州職業技術學院專業有哪些?專業介紹
  • copyright 2024編程學習大全網