如何用16h BIOS显示符号

问题描述 投票:0回答:1

该程序必须获取并显示符号。但相反,我有一系列奇怪的符号 组织 100 小时

org 100h

section .text
_start:
    
    mov ah, 0     
    int 16h         

    mov [znak], al

    mov ah, 9   
    mov dx, znak     
    int 21h        

    mov ah, 4Ch         
    int 21h         

section .data
    znak db 0        

我尝试更改语法,但它不起作用,或者我只是看不到

assembly x86 keyboard nasm
1个回答
0
投票

不要使用 DOS.PrintString 函数 09h(要求字符串以 $ 字符终止),而是使用 DOS.PrintCharacter 函数 02h:

mov  ah, 00h   ; BIOS.GetKeystroke
int  16h       ; -> AX
mov  dl, al
mov  ah, 02h   ; DOS.PrintCharacter     
int  21h       ; -> (AL)
mov  ax, 4C00h ; DOS.Terminate        
int  21h

仍然想使用DOS.PrintString函数09h?
然后

  • 确保设置DS段寄存器
  • 以 $ 字符结束字符串
    mov  ax, @data
    mov  ds, ax
    mov  ah, 00h   ; BIOS.GetKeystroke
    int  16h       ; -> AX
    mov  [znak], al
    mov  dx, znak
    mov  ah, 09h   ; DOS.PrintString     
    int  21h       ; -> (AL)
    mov  ax, 4C00h ; DOS.Terminate        
    int  21h

section .data
    znak db 0, '$'
© www.soinside.com 2019 - 2024. All rights reserved.