电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

汇编言语接连程序实例

2017-05-21 09:45分类:电子技术 阅读:

 

汇编言语接连程序实例
设备一个新的int 7ch接连例程,为闪现输出供应如下的功用子程序。

(1)清屏。
(2)设置远景色。
(3)设置布景色。
(4)向上翻滚一行

(一)用ah寄存器传递功用号:0标明清屏,1标明设置远景色,2标明设置布景色,3标明向上翻滚一行;

(二)关于2、3号功用,用al传递色彩值,(al)∈{0,1,2,3,4,5,6,7}。

代码如下:

;功用:设备一个新的int7ch接连例程,完毕一个子程序 setScreen ,供应如下功用:
; (1)清屏。
; (2)设置远景色。
; (3)设置布景色。
; (4)向上翻滚一行

; 进口参数阐明:
; (1)每个子程序用 ah 寄存器传递功用号:
; (2)关于2、3号功用,用al传送色彩值,

assume cs:code,ds:data
data segment
err db ' ~~~~~ ah args is error! ~~~~~','$'
init dw 10 dup(0)
data ends

code segment
start:
mov ax,data
mov ds,ax
mov ax,0
mov es,ax
mov ax,es:[7ch*4]
mov init[0],ax
mov ax,es:[7ch*4+2]
mov init[1],ax

mov es:[7ch*4],offset setScreen
mov es:[7ch*4+2],cs




mov ax,102h
int 7ch
;call breakPoint
mov ax,201h
int 7ch
;call breakPoint
mov ax,300h
int 7ch
;call breakPoint
mov ax,0h
int 7ch
mov ax,400h
int 7ch


mov ax,0
mov es,ax
mov ax,data
mov ds,ax
mov ax,init[0]
mov es:[7ch*4],ax
mov ax,init[1]
mov es:[7ch*4+2],ax

ok: mov ax,4c00h
int 21h


setScreen:
jmp short setmain
list dw sub0,sub1,sub2,sub3

setmain:
cmp ah,3
ja subErr
mov bl,ah
mov bh,0
shl bx,1
call word ptr list[bx]
iret

sub0: ;清屏
mov cx,0b800h
mov es,cx
mov cx,2000
mov bx,0
sub0s:
mov byte ptr es:[bx],' '
add bx,2
loop sub0s
ret

sub1: ;设置远景色。
mov cx,0b800h
mov es,cx
mov cx,2000
mov bx,1
sub1s:
and byte ptr es:[bx],11111000b
or es:[bx],al
add bx,2
loop sub1s
ret

sub2: ;设置布景色。
mov cx,0b800h
mov es,cx
mov cx,2000
mov bx,1
shl al,1
shl al,1
shl al,1
shl al,1
sub2s:
and byte ptr es:[bx],10001111b
or es:[bx],al
add bx,2
loop sub2s
ret

sub3: ;向上翻滚一行
mov cx,0b800h
mov es,cx
mov ds,cx
mov di,0
mov si,160
cli
mov cx,24
sub3s:
push cx
mov cx,160
rep movsb
pop cx
loop sub3s
mov cx,160
mov bx,0
sub3s1:
mov byte ptr es:3840[bx],' '
add bx,2
loop sub3s1
ret
subErr: ;闪现过失期息
mov ax,data
mov ds,ax
mov ah,9
mov dx,offset err
int 21h
jmp ok
breakPoint: ;设置断点,用于调试
pushf
pop bx
or bh,3
push bx
popf
ret

code ends
end start

上一篇:电压比照器有啥用

下一篇:涤纶电容和陶瓷电容差异

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部