在内存中的显示缓存区中显示汉字”中国山西“(二)

本文通过汇编语言源代码演示如何在内存显示缓存区显示汉字'中国山西',讲解了从编译到链接,再到执行显示的完整过程。在MASM编译时需要注意中文字符可能导致的内存不足问题,需切换到英文状态解决。

汇编语言源代码:

assume cs:code,ds:data


data segment

DB 080H, 001H, 080H, 001H, 080H, 001H, 0FCH, 03FH, 0FCH, 03FH, 08CH, 031H, 08CH, 031H, 08CH, 031H
DB 0FCH, 03FH, 0FCH, 03FH, 08CH, 031H, 080H, 001H, 080H, 001H, 080H, 001H, 080H, 001H, 000H, 000H;中

DB 000H, 000H, 0FEH, 03FH, 0FEH, 03FH, 006H, 030H, 0F6H, 037H, 0F6H, 037H, 086H, 031H, 0F6H, 037H
DB 086H, 031H, 086H, 035H, 0F6H, 03FH, 0F6H, 03FH, 006H, 030H, 0FEH, 03FH, 0FEH, 03FH, 000H, 000H;国

DB 0C0H, 000H, 0C0H, 000H, 0C0H, 000H, 0C0H, 000H, 0C6H, 030H, 0C6H, 030H, 0C6H, 030H, 0C6H, 030H
DB 0C6H, 030H, 0C6H, 030H, 0C6H, 030H, 0C6H, 030H, 0FEH, 03FH, 0FEH, 03FH, 000H, 030H, 000H, 000H;山

DB 000H, 000H, 0FFH, 07FH, 0FFH, 07FH, 060H, 003H, 060H, 003H, 0FEH, 03FH, 0FEH, 03FH, 066H, 033H
DB 066H, 033H, 036H, 03FH, 01EH, 03EH, 006H, 030H, 0FEH, 03FH, 0FEH, 03FH, 006H, 030H, 000H, 000H;西

DB 1H,2H,4H,8H,10H,20H,40H,80H  ;用于过滤 01  10 100 1000 10000 100000 1000000 10000000

data ends

code segment

start:
     ;先进行初始化
     mov ax,data
     mov ds,ax

     mov ax,0b800h
     mov es,ax

     mov si,0

     mov di,0500h;从第0页第8行开始     
     
     mov cx,4;四个汉字循环四次
chinese:push cx
     push si
     push di

     ;对每个汉字进行操作,每个汉字需要处理16行,每行一个字,每个字两个字节,每个字节8个位,每个位and处理
     mov cx,16
show:push cx

     mov cx,2
showWord:push cx
     mov bx,80h
     mov cx,8
showByte:push cx
     mov ah,[si]
     mov dl,ah
     mov ah,[bx]
     mov dh,ah
     and dl,dh
     mov cx,0
     mov cl,dl
     jcxz a
     mov byte ptr es:[di],2ah
     inc di
     mov byte ptr es:[di],14h
     inc di
     jmp b
   a:mov byte ptr es:[di],20h
     inc di
     mov byte ptr es:[di],20h
     inc di
     jmp b
   b:inc bx
     pop cx
     loop showByte
     
     inc si
     pop cx
     loop showWord

     add di,80h
     pop cx
     loop show

     pop di
     pop si
     add si,32 ;进入第二个汉字
     add di,32 ;进入第二个汉字的第一行      
     pop cx  
     loop  chinese   

     mov ax,4c00h
     int 21h

code ends

end start

          
用汇编语言显示“中”

首先用masm编译该源代码,生成.obj文件;

用link链接该文件生成的.obj文件,生成.exe文件

再用debug命令运行该.exe文件,执行g命令,就显示如图所示的“中国山西“


注意:如果在masm过程中出现out of memory;可能是因为源程序中的逗号或分号处于中文状态下,改成英文状态,该错误就会消失。


这是本人最近写的小的汇编程序,欢迎大家批评指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值