鱼C论坛

 找回密码
 立即注册
查看: 3267|回复: 1

[技术交流] 王爽汇编第三版,16.4程序

[复制链接]
发表于 2020-4-3 02:58:17 | 显示全部楼层 |阅读模式

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

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

x
16.4字程序的
问题1:sub2:和子程序sub3:运行的时候有问题,sub2同时改变了字的颜色和背景颜色,sub3把原本是的代表字的颜色的最后三位,移动到了高位,进行了串用。

问题2:这个程序应该从sub0开始不应该从sub1开始,错误的标号使得ah=0的时候找的是sub1,这让非程序员使用很不舒服,但是这里我懒得改了~~

问题3:不是问题的问题:书上没有把程序写成最终的完整形式,我把他们拼凑了起来如下,代码风格烂!!!轻喷!!!轻喷!!!只对问题之处做了注释

问题4:新手第一次发技术帖,混点yu币,觉得我菜的不要骂我!!!
assume cs:code
code segment
start:
     mov al,01000010b
         mov ah,2
     call setscreen
     mov ax,4c00h
         int 21h
         
         
setscreen:
     jmp short set
         table dw sub1,sub2,sub3,sub4
         
         set:
             push bx
             cmp ah,3
             ja sret
             mov bl,ah
             mov bh,0
             add bx,bx
         
             call word ptr table[bx]
         
         sret:
             pop bx
             ret
         

         
         
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
         push ax
         
         mov bx,0b800h
         mov es,bx
         mov bx,1
         mov cx,2000
sub2s:

         
         and al,10001111b         ;;;;;;;;;;;;;;;;;;;;
         mov es:[bx],al
         
         add bx,2
         loop sub2s
         
         pop ax
         pop es
         pop cx
         pop bx
         ret
         
sub3:push bx
     push cx
         push es
         push ax
         
         mov bx,0b800h
         mov es,bx
         mov bx,1
         mov cx,2000
sub3s:

         
         or al,00000111b        ;改变背景但是不对字色影响,字色就为白色,注意sub2s中用的and ,这样让背景固定为黑色
         mov es:[bx],al
         
         add bx,2
         loop sub3s
         
         pop ax
         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
         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

code ends
end start


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-3 02:59:32 | 显示全部楼层
不知道怎么发程序,不知道本站文本编辑器会不会把空格或者别的字符吞掉?!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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