- [msc] assume cs:codesg,ds:data,es:table data seg 01/12 17:07
- [mouse] 答案见附注3 汇编编译器对jmp指令的相关处理 12/01 16:54
- [lghstock] 4是退出,0~3是功能4不涉及中断! 08/15 19:32
- [lghstock] 你的中断例,参考以下我的,看看是不是程序的入口和标号的默认问题!! 08/15 19:31
- [lghstock] 正在完成17的任务 08/15 19:29
- [lghstock] 你的中断出问题了,我第一次调也是! 08/15 19:27
- [游客] dingyixia 08/14 22:53
- [app] 程序有些问题,当第一次运行时,只有4可以运行,之后再运行,无法输入数字选项。 08/14 22:53
- [app] 快学完了,坚持到底! 08/14 22:46
- [tomato] 不错! 08/10 20:58
[2008-08-14 00:36] 实验16中断的演示程序
assume cs:code,ds:data,ss:stack
data segment
a db 'shuru error!'
b db '0-qingping',0
c db '1-qianjingse',0
d db '2-beijingse',0
e db '3-shangyihang',0
f db '4-tuichu',0
g db 'input:',0
h db 0B,02,03,04,05
k dw offset b,offset c,offset d,offset e,offset f,offset g
data ends
stack segment
db 128 dup (0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
setrun:call show ;显示功能说明
mov ah,2 ;置光标调用int-10h功能
mov bh,0 ;第0页
mov dh,14 ;dh中放行号
mov dl,36 ;dl中放列号
int 10h
shuru:in al,60h
mov bx,0
mov cx,5
shurus:cmp byte ptr ds:h[bx],al
je srok
inc bx
loop shurus
call sub1 ;显示出错信息
jmp shuru
srok:mov ah,bl
cmp ah,4
je over
int 7ch
call delay
jmp setrun
over:mov ax,4c00h
int 21h
;---------第6行中间显示出错信息子程序-----------
sub1:push si
push es
push ax
push cx
mov si,0b800h
mov es,si
mov si,6*160+64 ;在屏幕第6行中间显示出错信息
mov di,0
mov cx,12
mov ah,04h
sub1s:mov al,byte ptr ds:a[di]
mov word ptr es:[si],ax
inc di
add si,2
loop sub1s
call delay
mov si,6*160+64 ;在屏幕第6行中间清除出错信息
mov cx,12
sub1s1:mov byte ptr es:[si],02h ;用空格覆盖
add si,2
loop sub1s1
pop cx
pop ax
pop es
pop si
ret
;-------功能说明显示子程序--------
show:push si
push es
push ax
push cx
push bp
push bx
push di
mov si,0b800h
mov es,si
mov bp,9*160 ;在屏幕第9行开始中间显示功能说明
mov bx,offset k
mov ah,02h
mov cx,6
showss:push bx
mov bx,ds:[bx]
mov di,0
mov si,60
shows:mov al,byte ptr ds:[bx][di]
cmp al,0
je showok
mov word ptr es:[bp][si],ax
inc di
add si,2
jmp shows
showok:pop bx
add bx,2
add bp,160
loop showss
pop di
pop bx
pop bp
pop cx
pop ax
pop es
pop si
ret
;--------延迟子程序----------
delay:push ax
push dx
mov dx,5h
mov ax,0
ycs:sub ax,1
sbb dx,0
cmp ax,0
jne ycs
cmp dx,0
jne ycs
pop dx
pop ax
ret
code ends
end start
data segment
a db 'shuru error!'
b db '0-qingping',0
c db '1-qianjingse',0
d db '2-beijingse',0
e db '3-shangyihang',0
f db '4-tuichu',0
g db 'input:',0
h db 0B,02,03,04,05
k dw offset b,offset c,offset d,offset e,offset f,offset g
data ends
stack segment
db 128 dup (0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
setrun:call show ;显示功能说明
mov ah,2 ;置光标调用int-10h功能
mov bh,0 ;第0页
mov dh,14 ;dh中放行号
mov dl,36 ;dl中放列号
int 10h
shuru:in al,60h
mov bx,0
mov cx,5
shurus:cmp byte ptr ds:h[bx],al
je srok
inc bx
loop shurus
call sub1 ;显示出错信息
jmp shuru
srok:mov ah,bl
cmp ah,4
je over
int 7ch
call delay
jmp setrun
over:mov ax,4c00h
int 21h
;---------第6行中间显示出错信息子程序-----------
sub1:push si
push es
push ax
push cx
mov si,0b800h
mov es,si
mov si,6*160+64 ;在屏幕第6行中间显示出错信息
mov di,0
mov cx,12
mov ah,04h
sub1s:mov al,byte ptr ds:a[di]
mov word ptr es:[si],ax
inc di
add si,2
loop sub1s
call delay
mov si,6*160+64 ;在屏幕第6行中间清除出错信息
mov cx,12
sub1s1:mov byte ptr es:[si],02h ;用空格覆盖
add si,2
loop sub1s1
pop cx
pop ax
pop es
pop si
ret
;-------功能说明显示子程序--------
show:push si
push es
push ax
push cx
push bp
push bx
push di
mov si,0b800h
mov es,si
mov bp,9*160 ;在屏幕第9行开始中间显示功能说明
mov bx,offset k
mov ah,02h
mov cx,6
showss:push bx
mov bx,ds:[bx]
mov di,0
mov si,60
shows:mov al,byte ptr ds:[bx][di]
cmp al,0
je showok
mov word ptr es:[bp][si],ax
inc di
add si,2
jmp shows
showok:pop bx
add bx,2
add bp,160
loop showss
pop di
pop bx
pop bp
pop cx
pop ax
pop es
pop si
ret
;--------延迟子程序----------
delay:push ax
push dx
mov dx,5h
mov ax,0
ycs:sub ax,1
sbb dx,0
cmp ax,0
jne ycs
cmp dx,0
jne ycs
pop dx
pop ax
ret
code ends
end start
评论次数(4) |
浏览次数(540) |
类型(汇编作业) |
收藏此文 |