首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

匯編語言循環顯示寄存器值:二進制與十六進制輸出實現

     編輯:程式設計綜合問答

題目要求

  1. 二進制顯示BX(無符號),如BX=20輸出0000000000010100B,用LOOP實現。
  2. 十六進制顯示BX,如BX=12345輸出3039H,用LOOP實現。

核心思路:移位+查表

利用ROL/ROR循環移位將每位/每4位移至最低位,查表輸出對應字符。

二進制顯示代碼

DATA SEGMENT
    BIN_FMT DB '0000000000000000B$' ; 16位+後綴
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START:
    MOV AX, DATA
    MOV DS, AX
    MOV BX, 20          ; 測試值
    LEA SI, BIN_FMT
    MOV CX, 16          ; 16位
SHOW_BIN:
    ROL BX, 1           ; 最高位移至CF
    MOV DL, '0'
    ADC DL, 0           ; CF=1則DL='1'
    MOV [SI], DL
    INC SI
    LOOP SHOW_BIN
    
    LEA DX, BIN_FMT
    MOV AH, 09H
    INT 21H
    
    MOV AH, 4CH
    INT 21H
CODE ENDS
    END START

十六進制顯示代碼

DATA SEGMENT
    HEX_TAB DB '0123456789ABCDEF'
    HEX_FMT DB '0000H$'
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START:
    MOV AX, DATA
    MOV DS, AX
    MOV BX, 12345       ; 3039H
    LEA SI, HEX_FMT
    MOV CX, 4           ; 4個十六進制位
SHOW_HEX:
    ROL BX, 4           ; 高4位移至低4位
    MOV DL, BL
    AND DL, 0FH         ; 取低4位
    XLAT                ; AL=HEX_TAB[DL],需先MOV BX, OFFSET HEX_TAB
    MOV [SI], AL
    INC SI
    LOOP SHOW_HEX
    
    LEA DX, HEX_FMT
    MOV AH, 09H
    INT 21H
    
    MOV AH, 4CH
    INT 21H
CODE ENDS
    END START

關鍵指令解析

  • ROL reg, n:循環左移,高位移入低位並進入CF。
  • ADC DL, 0:DL = DL + 0 + CF,巧妙將CF轉為字符'0'/'1'。
  • XLAT:AL = DS:[BX + AL]查表轉換,需預置BX為表首地址。
  • LOOP:CX--; if CX!=0 JMP,隱式使用CX作計數器。

參考資源

百度文庫《匯編語言程序設計》第38頁有詳細講解:鏈接

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved