我刚刚开始学习汇编语言,我已经陷入了“在屏幕上显示存储在寄存器中的十进制值”的部分。我使用 emu8086,任何帮助将不胜感激!:)
.model small ;Specifies the memory model used for program to identify the size of code and data segments
org 100h ;allocate 100H memory locations for stack
.data ;the segment of the memory to declare/initialze the variables
var1 db 0006
var2 db 0002
var3 db 0001
.code ;start of the code segment
main proc ;start of the first procedure
mov bl, var1
add bl, var2
add bl, var3
mov ah, 00h ; display function here?
mov dl, bl ; output the bl register's value?
int 21h
mov ah, 4ch ;exit DOS function
int 21h
endp ;end of the first procedure
end main ;end of the complete assembly program
ret
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)mov ah, 00h ; display function here?
否,单字符显示功能在AH=2 /int 21h
由于您的 BL 寄存器仅包含一个很小的值 (9),因此它所需要的就是:
mov ah, 02h
mov dl, bl
add dl, "0" ; Integer to single-digit ASCII character
int 21h
Run Code Online (Sandbox Code Playgroud)
如果值变得更大但不超过 99,您可以使用:
mov al, bl ; [0,99]
aam ; divide by 10: quotient in ah, remainder in al (opposite of DIV)
add ax, "00"
xchg al, ah
mov dx, ax
mov ah, 02h
int 21h
mov dl, dh
int 21h
Run Code Online (Sandbox Code Playgroud)
不使用AAM指令的解决方案:
mov al, bl ; [0,99]
cbw ; Same result as 'mov ah, 0' in this case
mov dl, 10
div dl ; Divides AX by 10: quotient in al, remainder in ah
add ax, "00"
mov dx, ax
mov ah, 02h
int 21h
mov dl, dh
int 21h
Run Code Online (Sandbox Code Playgroud)