鱼C论坛

 找回密码
 立即注册
查看: 2653|回复: 0

[汇编作业] 作业实验16

[复制链接]
发表于 2017-2-22 12:37:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
中断程序的编译安装都没问题,下面是中断处理程序:
assume cs:code
code segment

start:mov ax,cs
        mov ds,ax
        mov si,offset s
        mov ax,0
        mov es,ax
        mov di,200h
        mov cx,offset send - offset s
        cld
        rep movsb
        
        cli
        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7ch*4+2],0
        sti
        mov ax,4c00h
        int 21h
        
s:jmp short set
        table dw sub1-s+200h,sub2-s+200h,sub3-s+200h,sub4-s+200h
        
set:push bx

        cmp ah,3           ;判断功能号是否大于3
        ja sret
        mov bl,ah
        mov bh,0
        add bx,bx          ;根据ah中的功能号计算对应子程序在table表中的偏移
        call word ptr table[bx]
        
sret:pop bx
        iret
        
sub1:push bx
        push cx
        push es
        mov bx,0b800h
        mov es,bx
        mov bx,0
        mov cx,2000
sub1s:mov byte ptr es:[bx],' '
        add bx,2
        loop sub1s
        pop es
        pop cx
        pop bx
        ret
        
sub2: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
        
sub3:push bx
        push cx
        push es
        mov cl,4
        shl al,cl
        mov bx,0b800h
        mov es,bx
        mov bx,1
        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
        
sub4:push cx
        push si
        push di
        push es
        push ds
        
        mov si,0b800h
        mov es,si
        mov ds,si
        mov si,160               ;ds:si指向第n+1行
        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 ds
        pop es
        pop di
        pop si
        pop cx
        ret
        
send:nop

code ends
end start
其实代码就是小甲鱼提供的答案1.但调用该中断程序就出问题了!下面为问题截图和调用代码:
assume cs:code,ds:data
data segment
        db 'I love masm!',0
data ends
code segment
start:mov dh,8
        mov dl,3
        mov cl,24h
        mov ax,data
        mov ds,ax
        mov si,0
        call show_str
        mov ah,1
        mov al,6
        int 7ch
        
        mov ax,4c00h
        int 21h
        
show_str:
        push bx
        push ax
        push di
        push es
        dec dh                ;当前行之前的行数
    dec dl                ;从当前行开始的当前列之前的列数
        mov al,0a0h           ;将160送入al,为下一步乘法运算准备
        mul dh                ;乘法结果在ax中,这步是计算所在行的偏移
    mov di,ax             ;将行偏移数送入di
        mov ax,0b800h
        mov es,ax             ;将段地址b800h送入es
        
        mov al,2              ;将2送入al中,为下一步乘法运算准备
        mul dl                ;乘法结果在ax中,这一步是计算所在列的偏移
        add di,ax             ;将列偏移加上之前保存在di的行偏之和送入di
        
        mov bl,cl
s:  mov cl,[si]           ;将ds:si指向的字符数据送入cl
        mov ch,0              ;ch置0
        jcxz ok
        mov al,[si]           ;将ds:si指向的字符数据送入al
        mov ah,bl             ;将颜色信息送入ah
        mov es:[di],ax        ;将字符及字符颜色等信息送入es:di指向的内存字单元,即显卡缓存
        inc si
        add di,2
        jmp short s
ok: pop es
        pop di
        pop ax
        pop bx
        ret
code ends
end start
捕获1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表