什么" mov啊,0Bh" /" int 21h"在DOS程序集中做什么?

时间:2018-03-27 16:37:42

标签: assembly dos masm x86-16 emu8086

我看到这段代码在CRO上生成并显示方波。

data segment

base_add equ 0ef40h
porta equ base_add+0 
portb equ base_add+1
portc equ base_add+2
control_word equ base_add+3

data ends

code segment
assume cs:code, ds:data
start : mov ax, data
mov ds, ax
mov dx, control_word
mov al, 80h
out dx, al


up2:
 mov cx, 000ffh
 mov al, 00h
 mov dx, portb

 mov al, 00h

  here1: out dx,
loop here1

mov cx, 00ffh

     mov al, 0ffh
here2: out dx, al
 loop here2

mov ah, 0bh   ; LINE1
int 21h

or al, al    ; LINE2
jz up2

mov ah, 4ch
int 21h
code ends
end start

接近尾声,mov ah, 0Bh中断和or al, al的用途是什么? 不是or al, al基本上只是al吗?有什么需要明确提到它? 我甚至试图找出0Bh中断的作用,但我无法理解我读到的内容。任何有关这方面的帮助将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:2)

这是MSDOS汇编代码。

mov ah, 0Bh   ; LINE1
int 21h

调用DOS以检查标准输入上的字符是否可用。如果没有可用的字符,则此调用将返回0;当字符可用时,此调用将返回0xFF。返回值将通过al寄存器返回,所以

or al, al    ; LINE2
jz up2

将测试一个字符是否可用(or al, al仅在al为零时才为零),如果没有任何内容可读,则跳转到 up2

提示:如果您正在使用DOS,请抓住Ralf Brown的中断列表副本