|
主题 : : 一个显示汉字的代码 [待解决] |
回复[ 12次 ]
点击[ 1059次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-12-12 09:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:50
信誉值:0
注册日期:2007-11-27 20:05 |
初学,还看不懂这个程序,不过觉的显示汉字很好完,希望高手能帮分析一下
运行能显示一个汉字“好”。
assume cs:code, ds:data
data segment
s1 DB 0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,3,3,0,0,0
DB 0,0,0,3,3,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0
DB 0,0,0,3,3,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0
DB 0,0,0,3,3,0,3,3,3,0,0,0,0,3,3,0,0,0,0,0
DB 0,3,3,3,3,3,3,3,0,0,0,0,3,3,0,0,0,0,0,0
DB 0,0,0,3,3,0,3,3,0,0,0,0,3,3,0,0,0,0,0,0
DB 0,0,3,3,0,0,3,3,0,0,0,0,3,3,0,0,0,0,0,0
DB 0,0,3,3,0,0,3,3,0,0,0,0,3,3,0,0,3,3,3,0
DB 0,0,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0
DB 0,0,3,3,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,0
DB 0,3,3,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,0
DB 0,0,3,3,3,3,3,0,0,0,0,0,3,3,0,0,0,0,0,0
DB 0,0,0,0,3,3,3,3,0,0,0,0,3,3,0,0,0,0,0,0
DB 0,0,0,3,3,0,3,3,3,0,0,0,3,3,0,0,0,0,0,0
DB 0,0,3,3,0,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0
DB 0,3,3,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0
DB 3,3,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
cnt1 db 20
cnt2 db 20
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ah, 00h
mov al, 04h
int 10h
mov ah, 0bh
mov dh, 01h
mov dl, 00h
int 10h
xor di, di
mov ah, 0CH
mov dx, 50
mov cnt1, 20
LL1:
mov cx, 50
mov cnt2, 20
LL2:
cmp [s1+di], 2
jl black
mov AL, 1
jmp rets
black:
mov AL, 0
rets:
int 10h
INC DI
INC CX
DEC [cnt2]
jnz LL2
INC DX
DEC [cnt1]
jnz LL1
;============================
exit:
mov ah, 7
int 21h
mov ah, 4ch
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-12-12 12:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:342
信誉值:0
注册日期:2007-12-06 10:21 |
初学为什么要看这种程序?
回头去看汇编语言吧!放着慢慢研究。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-12-12 14:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:19
信誉值:0
注册日期:2007-07-05 17:25 |
大体思路是图形模式下,打印相应的点阵,用像素点形成一个汉字。S1程序段你仔细看就是一个汉字。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-12-13 16:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:50
信誉值:0
注册日期:2007-11-27 20:05 |
有点好奇心;-)
我再查查,学过点ibm就是为了过考试没有记住什么。等我学完汇编一定自己弄个汉字库~ | | |
|
|
|
|
[第4楼]
[ 回复时间:2007-12-14 12:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
等我完成了课设一后弄弄,不错的例子,支持下
先收藏了~ | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-12-27 13:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:24
信誉值:3
注册日期:2007-06-06 11:53 |
|
|
|
|
|
[第6楼]
[ 回复时间:2008-01-05 13:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:50
信誉值:0
注册日期:2007-11-27 20:05 |
|
|
|
|
|
[第7楼]
[ 回复时间:2008-03-27 10:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
|
|
|
|
|
[第8楼]
[ 回复时间:2008-03-28 10:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:45
信誉值:0
注册日期:2007-05-05 09:01 |
原理是在通过
mov al, 04h
int 10h 中断设置为图形显示模式,然后根据像素点,拼成一个汉字,仅此而已! | | |
|
|
|
|
[第9楼]
[ 回复时间:2008-04-20 23:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-18 23:25 |
这就是LED显示原理程序吧~哈哈~~终于找到了~~顶了! | | |
|
|
|
|
[第10楼]
[ 回复时间:2008-05-22 21:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-22 20:46 |
我已在中国DOS联盟论坛上将它扩展成了“24x32点阵汉字缩放演示程序”
功能如下:
ZOOM24.COM----24x32点阵
汉字缩放演示器
(C) Mar. 10, 2008
设计: 苏州(本是)罗明安
(email: born2be@126.com)
由小数字区键控制,
各键功能如下:
Esc=退出
4=横缩1 8=纵缩1
6=横扩1 2=纵扩1
7=4+8 3=2+6
1=4+2 9=6+8
-=慢速 5=最小
+=快速 回车=最大
0=显背景 *=显前景
.=隐背景 /=隐前景
附件(http://rtngslin.moe.hm/cndos-up/img/087.rar)中,
zoom24.com DEMO执行文件
zoomread.com DEMO说明汉字自显示程序
zoomread.txt DEMO说明汉字文本 | | |
|
|
|
|
[第11楼]
[ 回复时间:2008-05-22 21:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-22 20:46 |
另:[F1]功能键显示最简帮助行。
zoom24.com程序中运用了许多技巧,比如汉字字模的解拆至比特、缩放、VGA寄存器快速写点、4重FOR循环、内存地址/指令直接修改等……所以执行程序未压缩未加密时只有654字节!
源代码也干脆给你们了!
.286p
code segment byte public
assume cs:code,ds:code,es:code
org 100h
Start:
cld
mov si,offset s1
mov di,offset s2
mov ch,24
l1:mov cl,4
l2:lodsb
mov bl,al
mov dh,8
l3:xor ax,ax
rcl bl,1
jnc i0
inc ax
i0:shl ax,1;0;2
inc ax ;1;3
stosw
dec dh
jnz l3
dec cl
jnz l2
dec ch
jnz l1
again:
mov $DataCtr,2
mov ax,12h ;SCREEN 12
int 10h
;
xor bp,bp
dec bp
mov I,bp ;FOR i = 0 TO 23
ForLoop_01:inc I
mov ax,I
cmp al,23 ;jle $+3 ;;ForLoop_01_Ok
jg Next_01;jmp Next_01 ;;ForLoop_01_Ok:
mov ax,Z
mov bx,I
imul bl
add ax,X;;tho DEL-able for x=0
mov A,ax ;a=z*i+x
mov J,bp ;FOR j = 0 TO 23
ForLoop_02:inc J
mov ax,J
cmp al,31
jg Next_02
call _xIndex ;b=h*j+y;READ n
mov bx,ax;N,ax
mov K,bp ;FOR k = 0 TO z
ForLoop_03:inc K
mov ax,K
cmp ax,Z
jg Next_03
mov L,bp ;FOR l = 0 TO h
ForLoop_04:inc L
mov ax,L
cmp ax,H
jg Next_04
mov dx,A ;dx=e=a+k
add dx,K
mov cx,B ;cx=f=b+l
add cx,L
mov al,bl;N ;3/1;=fore/back;P/preSET e f n
cmp bl,1;N,1;0 ;IF n > 0 THEN
db 7Fh ;jg _EndIf_01A;B
finsdel db 02;07;;ins;del ;fore
db 0EBh ;jmp $+2;_EndIf_01B;
insdel db 00;05
_EndIf_01A: ;ENDIF
call cs:[Pset]
_EndIf_01B:jmp ForLoop_04 ;NEXT l
Next_04: jmp ForLoop_03 ;NEXT k
Next_03: jmp ForLoop_02 ;NEXT j
Next_02:jmp ForLoop_01 ;NEXT i
Next_01:
getkey:
push cs
pop es
xor ah,ah
int 16h
mov al,ah
cld
mov di,offset scodetab
mov cx,lscode+1
repne scasb
je dispatch
beep:
mov dx,1900h
xor bh,bh
mov ah,2
int 10h
mov dx,offset lma
mov ah,9
int 21h
jmp short getkey
dispatch:
sub di,(offset scodetab)+1
shl di,1
call ofstab[di]
jmp again
lma db ' Zoom24.com (C)2008.3 by 苏州(本是)罗明安 born2be@126.com [Esc]=exit $'
scodetab db 1,'JNHPKMSR57GOIQL',1Ch
lscode equ $-scodetab
ofstab label word
dw offset _esc
dw offset _j
dw offset _n
dw offset _h
dw offset _p
dw offset _k
dw offset _m
dw offset _s
dw offset _r
dw offset _5
dw offset _7
dw offset _g
dw offset _o
dw offset _i
dw offset _q
dw offset _l
dw offset _1c
;
dw offset _nocmd
;;
_esc: mov ax,3
int 10h
mov ah,4Ch
int 21h
_j: mov ax,offset PSet1
_jn: mov PSet,ax
_nocmd: ret
_n: mov ax,offset PSet2
jmp short _jn
_s: mov al,05;del back
insdelj: mov insdel,al
ret
_r: mov al,00;ins back
jmp short insdelj
_5: mov al,07;del fore
finsdelj: mov finsdel,al
ret
_7: mov al,02;ins fore
jmp short finsdelj
_g:; dec h
dec z
_k: dec h
ret
_o: dec h
_p: inc z
ret
_i: inc h
_h: dec z
ret
_q:; inc h
inc z
_m: inc h
ret
_l: mov ax,1
z_h: mov Z,ax
mov H,ax
ret
_1c: mov ax,20
jmp short z_h
Pset1 Proc Near
mov ah,0Ch
xor bh,bh
int 10h
ret
Pset1 Endp
Pset2 Proc Near
push ds
push si
shl dx,4
mov si,dx
shl dx,2
add si,dx
mov dx,cx
shr dx,3
add si,dx
push 0A000h
pop ds
and cl,07h ;bit
mov dx,3CEh
mov ah,al ;color
mov al,0
out dx,ax
mov al,8 ;bit mask
mov ah,80h
shr ah,cl
out dx,ax
mov ax,0F01h ;reset
out dx,ax
mov al,[si]
mov [si],al;bl;al
pop si;\;mov ax,0001
pop ds ;out dx,ax
ret ;mov ax,0FF08h
Pset2 Endp;out dx,ax
_xIndex Proc Near
mov ax,H
mov bx,J
imul bl
add ax,Y;;tho DEL-able for y=0
mov B,ax ;b=h*j+y
mov si,offset $UserData
mov bx,$DataCtr
mov ax,[si+bx]
add $DataCtr,2
ret
_xIndex Endp
X dw 0
Y dw 0
Z dw 3
H dw 3
I dw 0
J dw 0
K dw 0
L dw 0
A dw 0
B dw 0
;N dw 0
PSet dw offset PSet1
s1 label word
db 00000000B,00000000B,00000000B,00000000B ;32x24
db 00000000B,00000000B,00000000B,00000000B
db 00000000B,00000011B,10000000B,00000000B
db 00000000B,00000011B,11000000B,00000000B
db 00001111B,11111111B,11111111B,11100000B
db 00001111B,11111111B,11111111B,11100000B
db 00001111B,10000000B,00000001B,11100000B
db 00001110B,00000111B,11111001B,11100000B
db 00001110B,01111111B,11111100B,11100000B
db 00001110B,01111110B,01111100B,11100000B
db 00000000B,00001111B,11110000B,00000000B
db 00000000B,00000111B,10000000B,00000000B
db 00000001B,11111111B,11111111B,11111110B
db 01111111B,11111111B,11111111B,11111110B
db 01111111B,11111101B,11111111B,11111110B
db 01100000B,00000001B,11100000B,01111100B
db 00000000B,00000001B,11100000B,00000000B
db 00000000B,00000011B,11100000B,00000000B
db 00000011B,00001111B,11000000B,00000000B
db 00000001B,11111111B,10000000B,00000000B
db 00000000B,01111111B,00000000B,00000000B
db 00000000B,00000000B,00000000B,00000000B
db 00000000B,00000000B,00000000B,00000000B
db 00000000B,00000000B,00000000B,00000000B
$DataCtr DW 2
$UserData DW 0
;
s2 label word;dw 24*24 dup(?)
code ends
end Start | | |
|
|
|
|
[第12楼]
[ 回复时间:2008-05-22 21:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-22 20:46 |
|
|