一个综合的程序

zhouqing19871024 2008-10-26 06:59:04
题目要求:安装一个新的INT 7CH中断例程,实现清屏,设置前景色,设置背景色,向上滚动一行的功能
assume cs:code


code segment

start:

mov ax,cs

mov ds,ax

mov si,offset intstart

mov ax,0

mov es,ax

mov di,200h

mov cx,offset intstartend-offset intstart

cld

rep movsb

;以上9句为安装中断例程



mov word ptr es:[7ch*4],200h

mov word ptr es:[7ch*4+2],0

;以上2句为设置中断向量
mov ax,0b800h
mov es,ax
mov di,0
mov cx,2000
s: mov byte ptr es:[di],'A'
add di,2
loop s
mov ah,2 ;达不到预期的效果啊?
mov al,5
int 7ch

mov ax,4c00h
int 21h




intstart: jmp short set
table dw sub1,sub2,sub3,sub4
set: ;push ax
push bx
cmp ah,3
ja sret
mov bl,ah
mov bh,0
add bx,bx
call word ptr table[bx]
sret: pop bx
;pop ax
ret
sub1: push ax
push bx
push di
push cx
mov ax,0b800h
mov es,ax
mov ax,0
mov ax,di
mov cx,2000
sub1s:mov byte ptr es:[di],' '
add di,2
loop sub1s
pop cx
pop di
pop bx
pop ax
ret
sub2: push es
push bx
push cx
mov bx,0b800h
mov es,bx
mov bx,1
mov cx,2000
sub2s: and byte ptr es:[bx],11111000b
or es:[bx],al
loop sub2s
pop cx
pop bx
pop es
ret

sub3: push es
push bx
push cx
mov bx,0b800h
mov es,bx
mov bx,1
mov cl,4
shl al,cl
mov cx,2000
sub3s: and byte ptr es:[bx],10001111b
shl al,1
shl al,1
shl al,1
shl al,1
or es:[bx],al
add bx,2
loop sub3s
pop cx
pop bx
pop es
ret

sub4: push bx
push es
push ds
push di
push si
push cx
mov bx,0b800h
mov es,bx
mov ds,bx
mov di,0
mov si,160
cld
mov cx,24
sub4s: push cx
mov cx,160
rep movsb
pop cx
loop sub4s
mov cx,80
mov si,0
sub4ss: mov byte ptr [160*24+si], ' '
add si,2
loop sub4ss
pop bx
pop es
pop ds
pop di
pop si
pop cx
ret


intstartend: nop
code ends
end start

弄了老半天,总是出现内存出错的信息 望哪位高人给讲解一下 我主要是那个应用测试的程序段不会写
...全文
151 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
singer123 2008-11-01
  • 打赏
  • 举报
回复
data segment

str1 db "First: You will can't look us!",'$'

str2 db "Second: Because we are in Row 1, now!",'$'

data ends



code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

lea dx,str1

mov ah,9 ;显示第一个字符串str1

int 21h



mov bh,0

mov dh,1

mov dl,0

mov ah,2

int 10h ;将光标置为第1行、第0列[行、列下标都从0开始]。



lea dx,str2

mov ah,9

int 21h ;显示第二个字符串str2



mov ah,1 ;从设置前景色开始进行循环

mov al,1 ; 颜色属性初始为1(1为蓝色)

func: push ax

cmp ah,3

ja quit

call setscreen

call delay

pop ax

inc ah ;功能号加1

inc al ;颜色属性加1后变为绿色

jmp short func



quit: mov ah,0 ;跳出循环后则清屏

call setscreen



mov ax,4c00h

int 21h





setscreen proc near ;设置屏幕函数的子程序

jmp short set

table: dw sub1,sub2,sub3,sub4

set: push ax

push bx



cmp ah,3

ja sret

mov bl,ah

mov bh,0

add bx,bx



call word ptr table[bx]



sret: pop bx

pop ax

ret

setscreen endp



delay proc near ;延迟函数,让CPU执行15000000h次减法。

push ax

push dx

mov dx,1500h

mov ax,0

s1: sub ax,1

sbb dx,0

cmp ax,0

jne s1

cmp dx,0

jne s1

pop dx

pop ax

ret

delay endp



sub1 proc near ;清屏的子过程定义

push bx

push cx

push es



mov bx,0b800h

mov es,bx



mov bx,0

mov cx,2000

sub1s: mov byte ptr es:[bx],0

;mov byte ptr es:[bx+1],0 ;是否也清除屏幕的背景色(随便你)

add bx,2

loop sub1s



pop es

pop cx

pop bx

ret

sub1 endp



sub2 proc near ;设置前景色的子过程定义

push bx

push cx

push es



mov bx,0b800h

mov es,bx

mov bx,1



mov cx,2000

sub2s: and byte ptr es:[bx],11111000b

or es:[bx],al

add bx,2

loop sub2s



pop es

pop cx

pop bx

ret

sub2 endp



sub3 proc near ;设置背景色的子过程定义

push bx

push cx

push es



mov bx,0b800h

mov es,bx

mov bx,1



mov cl,4

shl al,cl



mov cx,2000

sub3s: and byte ptr es:[bx],10001111b

or es:[bx],al

add bx,2

loop sub3s



pop es

pop cx

pop bx

ret

sub3 endp



sub4 proc near ;向上滚动一行的子过程定义

push cx

push di

push ds

push es

push si



mov si,0b800h

mov ds,si

mov es,si

mov si,160

mov di,0

cld



mov cx,24

sub4s: push cx

mov cx,160

rep movsb

pop cx

loop sub4s



mov cx,80

mov si,0



sub4s1: mov byte ptr [160*24+si],' '

add si,2

loop sub4s1



pop si

pop es

pop ds

pop di

pop cx

ret

sub4 endp



code ends

end start
编译后是自动运行的。或许能帮你一下!
n_yHHy_n 2008-10-26
  • 打赏
  • 举报
回复
学习。
cnzdgs 2008-10-26
  • 打赏
  • 举报
回复
又是跟王爽学汇编的。
你的代码错误过多,建议你从最基本的程序学起。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧