1.编制一个子程序把一个16位二进制数用十六进制形式在屏幕上显示出来,分别运用如 下3种参数传递方法,并用一个主程序验证它。 (1)采用AX寄存器传递这个16位二进制数 (2)采用wordTEMP变量传递这个16位二进制数 (3)采用堆栈方法传递这个16位二进制数。写完整
时间: 2024-02-12 13:04:49 浏览: 37
程序如下:
```assembly
.MODEL SMALL
.STACK 100h
.DATA
msg1 DB 'The hex value is: $'
msg2 DB 0
.CODE
MAIN PROC
; Example of passing 16-bit binary number as a parameter using AX register
MOV AX, 0B1100110000001111B ; 16-bit binary number to be converted to hex
CALL BIN2HEX_USING_AX ; Call the subroutine to convert binary to hex
; Example of passing 16-bit binary number as a parameter using word variable
MOV wordTEMP, 0B1111000011110000B ; 16-bit binary number to be converted to hex
CALL BIN2HEX_USING_WORD ; Call the subroutine to convert binary to hex
; Example of passing 16-bit binary number as a parameter using stack
PUSH 0B1010101010101010B ; 16-bit binary number to be converted to hex
CALL BIN2HEX_USING_STACK ; Call the subroutine to convert binary to hex
; Exit program
MOV AH, 4CH
INT 21H
MAIN ENDP
; Subroutine to convert 16-bit binary to hex using AX register
BIN2HEX_USING_AX PROC
; Save registers
PUSH AX
PUSH BX
PUSH CX
PUSH DX
; Convert binary to hex digit by digit
MOV CX, 4 ; Four hex digits in a 16-bit binary number
MOV BX, 8000H ; Starting binary digit (leftmost)
MOV msg2, '$'
L1:
MOV DX, 0 ; Clear DX for division
DIV BX ; Divide binary by 2^4 (hexadecimal)
CMP DL, 10 ; If remainder >= 10, add 7 to get hex digit (A-F)
JL L2
ADD DL, 7
L2:
ADD DL, 30H ; Convert to ASCII character
MOV msg2[2+CX], DL ; Store hex digit in msg2
LOOP L1
; Print hex value
MOV AH, 09H
LEA DX, msg1
INT 21H
LEA DX, msg2
INT 21H
; Restore registers
POP DX
POP CX
POP BX
POP AX
RET
BIN2HEX_USING_AX ENDP
; Subroutine to convert 16-bit binary to hex using word variable
BIN2HEX_USING_WORD PROC
; Save registers
PUSH AX
PUSH CX
PUSH DX
; Convert binary to hex digit by digit
MOV CX, 4 ; Four hex digits in a 16-bit binary number
MOV BX, 8000H ; Starting binary digit (leftmost)
MOV msg2, '$'
L3:
MOV DX, 0 ; Clear DX for division
DIV BX ; Divide binary by 2^4 (hexadecimal)
CMP DL, 10 ; If remainder >= 10, add 7 to get hex digit (A-F)
JL L4
ADD DL, 7
L4:
ADD DL, 30H ; Convert to ASCII character
MOV msg2[2+CX], DL ; Store hex digit in msg2
LOOP L3
; Print hex value
MOV AH, 09H
LEA DX, msg1
INT 21H
LEA DX, msg2
INT 21H
; Restore registers
POP DX
POP CX
POP AX
RET
BIN2HEX_USING_WORD ENDP
; Subroutine to convert 16-bit binary to hex using stack
BIN2HEX_USING_STACK PROC
; Save registers
PUSH AX
PUSH CX
PUSH DX
; Convert binary to hex digit by digit
MOV CX, 4 ; Four hex digits in a 16-bit binary number
MOV BX, 8000H ; Starting binary digit (leftmost)
MOV msg2, '$'
L5:
POP DX ; Pop binary digit from stack
DIV BX ; Divide binary by 2^4 (hexadecimal)
CMP DL, 10 ; If remainder >= 10, add 7 to get hex digit (A-F)
JL L6
ADD DL, 7
L6:
ADD DL, 30H ; Convert to ASCII character
MOV msg2[2+CX], DL ; Store hex digit in msg2
LOOP L5
; Print hex value
MOV AH, 09H
LEA DX, msg1
INT 21H
LEA DX, msg2
INT 21H
; Restore registers
POP DX
POP CX
POP AX
RET 2 ; Clean up stack (remove binary value)
BIN2HEX_USING_STACK ENDP
END MAIN
```
该程序定义了三个子程序来将一个16位二进制数转换为十六进制数,并使用三种不同的参数传递方法:AX寄存器、word变量和堆栈。主程序在三种不同的情况下调用这些子程序,以验证它们的正确性。