cpj0036 发表于 2020-4-3 02:58:17

王爽汇编第三版,16.4程序

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
       
       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:,' '
   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:,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:,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 ,' '
       add si,2
       loop sub4s1
       
       pop ds
       pop es
       pop di
       pop si
       pop cx
       ret

code ends
end start


cpj0036 发表于 2020-4-3 02:59:32

不知道怎么发程序,不知道本站文本编辑器会不会把空格或者别的字符吞掉?!
页: [1]
查看完整版本: 王爽汇编第三版,16.4程序