打开 “BIOS、DOS中断大全”;
阅读下面的程序,找出其中调用的BIOS中断和DOS中断;
对照“大全”,查找对应中断各功能的入口参数、出口参数的说明,
assume cs:code, ss:stack
stack segment
db 100H dup (?)
stack ends
code segment
org 100h
start:
jmp beg
menu db 10,13,10,13,' MENU ' ; 10和13分别是回车换行符的ASCII值
db 10,13
db 10,13,' 1. FILE'
db 10,13,' 2. EDIT'
db 10,13,' 3. COMPILE'
db 10,13,' 4. RUN'
db 10,13,' 0. QUIT'
db 10,13
db 10,13,' please choose one of 0~4:','$'
codetab dw sub1, sub2, sub3, sub4
beg:
push cs
pop ds ;设置数据段
disp0:
lea dx,menu ;
mov ah,9
int 21h
;【功能描述:输出一个字符串到标准输出设备上。
;入口参数:AH=09H
;DS:DX=待输出字符的地址
;说明:待显示的字符串以’$’作为其结束标志
;出口参数:无】
mov ah,0
int 16h
;【功能描述:从键盘读入字符
;入口参数:AH=00H——读键盘
;出口参数:AH=键盘的扫描码
;AL=字符的ASCII 码】
sub al, 30h ;ASCII变数字
cmp al, 0
je exit
mov bl, al
mov bh, 0
add bx, bx
sub bx, 2
call word ptr codetab[bx]
jmp disp0
exit:
mov ah,4ch
int 21h
sub1 proc near
jmp sub1_disp
file db 10,13,' --new, open, save, print files.---',10,13,'$'
sub1_disp:
lea dx,file
mov ah,9
int 21h
ret
sub1 endp
sub2 proc near
jmp sub2_disp
edit db 10,13,' --copy, cut, paste the text.---',10,13,'$'
sub2_disp:
lea dx,edit
mov ah,9
int 21h
ret
sub2 endp
sub3 proc near
jmp sub3_disp
compile db 10,13,' --compile the source file, then get target file.---',10,13,'$'
sub3_disp:
lea dx,compile
mov ah,9
int 21h
ret
sub3 endp
sub4 proc near
jmp sub4_disp
run db 10,13,' --run, run, run, cannot stop.---',10,13,'$'
sub4_disp:
lea dx,run
mov ah,9
int 21h
ret
sub4 endp
code ends
end start