8086汇编语言显示‘刘’字,如何改成“张三”?如何修改字体的大小、字形、颜色?

时间:2021-09-12 12:16:25
【求助】怎样用8086汇编语言显示‘刘’字?      

--------------------------------------------------------------------------------
各位大侠,我在csdn看到一个帖子,网址见:
http://topic.csdn.net/u/20081027/10/90612772-08ca-4180-84d1-1ee0597c81f0.html?seed=1611778816

怎样用8086汇编语言显示‘刘’字?

我也姓刘,顶一个。 能移动的‘刘’字 
把下面虚线内数据保存为Liu.bat,直接双击即可运行。 
-------------------- 
Goto Liu 

E100  0E 1F B8 12 00 CD 10 FC B8 00 A0 8E C0 31 FF 89 
E110  FD BE 90 01 B9 10 00 E8 2E 00 A4 A4 83 C7 4E E2 
E120  F9 B4 00 CD 16 3C 0D 74 16 89 EF B9 10 00 26 C7 
E130  05 00 00 83 C7 50 E2 F6 89 EF 83 C7 50 EB D0 B8 
E140  03 00 CD 10 B4 4C CD 21 B4 02 B7 00 BA 20 10 CD 
E150  10 B3 24 89 FA 88 F7 E8 0E 00 88 D7 E8 09 00 C3 
E160  00 00 00 00 00 00 00 00 88 F8 D0 E8 D0 E8 D0 E8 
E170  D0 E8 0C 30 3C 39 76 02 04 07 B4 0E CD 10 88 F8 
E180  24 0F 0C 30 3C 39 76 02 04 07 B4 0E CD 10 C3 00 
E190  20 04 18 04 09 24 FF A4 02 24 42 24 22 24 14 24 
E1A0  14 24 08 24 08 24 14 24 22 04 43 04 81 14 00 08 
E1B0  10 00 10 20 10 40 10 84 FD FE 11 04 31 04 39 04 
E1C0  55 04 51 FC 91 04 11 04 11 04 11 04 11 FC 11 04 
E1D0  00 20 00 F0 0F 00 08 00 08 00 08 10 0F F8 08 40 
E1E0  00 00 00 00 FF FE 00 00 04 40 0C 30 10 18 20 08 
E1F0  5B 31 66 66 2D 32 35 65 5D 6C 62 62 2E 64 6F 74 

g=100 



:Liu 
Debug <Liu.bat  
-------------------- 
    程序在屏幕左上角写一“刘”字,屏幕中部显示“刘”的位置, 
是写屏时的ES:DI值。回车键结束程序,长按其它键,“刘”字逐行 
下移。 

再顶一个。 能变色的‘刘’字 
把下面虚线内数据保存为CaiLiu.bat,直接双击即可运行。 
----------------------------------                    
Goto CaiLiu 


e100  EB 1E 00 00 00 00 00 00 5C 48 5A 4B 31 36 00 6E 
e110  6F 74 20 66 6F 75 6E 64 21 07 0D 0A 24 00 00 00 
e120  0E 1F B4 0F CD 10 B4 00 A3 C0 00 B8 12 00 CD 10 
e130  B4 0B BB 01 01 CD 10 BB 00 00 CD 10 E8 79 00 BE 
e140  FF 01 BF 10 00 B9 02 00 51 8A 1C B9 08 00 51 D0 
e150  E3 72 04 B0 00 EB 02 B0 01 89 E9 B4 0C CD 10 45 
e160  59 E2 EB 46 59 E2 E1 4F 90 74 06 42 83 ED 10 EB 
e170  D4 B4 00 CD 16 3C 0D 75 09 A1 C0 00 CD 10 B4 4C 
e180  CD 21 A0 58 01 FE C0 3C FF 74 EE A2 58 01 88 C3 
e190  B1 04 D2 E8 0C 30 3C 39 76 02 04 07 B4 0E CD 10 
e1A0  88 D8 24 0F 0C 30 3C 39 76 02 04 07 B4 0E CD 10 
e1B0  EB 8A 00 00 00 00 00 00 B4 03 CD 10 B3 08 88 D0 
e1C0  F6 E3 89 C5 88 F0 B3 10 F6 E3 89 C2 C3 00 00 00 
e1D0  00 00 02 40 02 40 02 40 02 40 02 40 02 40 02 40 
e1E0  02 40 02 40 02 40 02 40 02 40 02 40 02 40 00 00 
e1F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 
e200  04 18 04 09 24 FF A4 02 24 42 24 22 24 14 24 14 
e210  24 08 24 08 24 14 24 22 04 43 04 81 14 00 08 10 
e220  00 10 20 10 40 10 84 FD FE 11 04 31 04 39 04 55 
e230  04 51 FC 91 04 11 04 11 04 11 04 11 FC 11 04 00 
e240  20 00 F0 0F 00 08 00 08 00 08 10 0F F8 08 40 08 
e250  40 08 44 FF FE 00 00 04 40 0C 30 10 18 20 08 1A 
e260  5B 31 66 66 2D 32 35 65 20 69 73 20 6C 62 62 2E 
e270  64 6F 74 2E 5D 00 21 C7 00 00 00 00 00 00 00 00 

g=100 



:CaiLiu 
Debug <CaiLiu.bat  

----------------------------------                    
    程序在屏幕左上角写一“刘”字,前面是当前彩色代码号。 
回车键结束程序,长按其它键,“刘”字逐字后移。 


上面是有个大侠的回答,我测试了,可以显示“刘”字,但是我有个问题:
这个bat文件的代码是如何得来的?
根据这个代码,如何得到汇编代码?
如何要是将“刘”改成“张三”如何改?
“刘”字如何修改颜色?字号(9号,16号,36号等)?字形(如仿宋,楷体,黑体等)? 

25 个解决方案

#1



上面的代码还有几个问题:
Goto CaiLiu === 这个是啥意思?没有见过

e100  EB 1E 00 00 00 00 00 00 5C 48 5A 4B 31 36 00 6E == e100是不是debug里面的e命令+address?

g=100 === 这个是啥意思呢?

q === 这个是退出吗?

:CaiLiu === 不懂这个是干啥的?
Debug <CaiLiu.bat   ===这个呢?


请教请教,谢谢先

#2


这都是DOS批处理中文件中的指令 
Goto CaiLiu === 转向标号CaiLiu执行 

e100  EB 1E 00 00 00 00 00 00 5C 48 5A 4B 31 36 00 6E ==e100是e命令+address 

g=100 ===这个是DEBUG中的,从IP:100 执行

q ===是退出 

:CaiLiu === 标号 
Debug <CaiLiu.bat  ===这个让Debug从CaiLiu.bat文件中接收指令

#3


大字显示的例子:汇编_数字式_实时电子钟
http://tieba.baidu.com/f?kz=545929112

#4


我asm都忘记的差不多了.得重头学起了,不过以前有了基础,现在温故知新应该能领悟更多`

#5


不懂,帮顶

#6


不懂,up

#7


用IDA反汇编了一下,
mov si, 190h;190这个地方不懂??
往A000:0段写"显存"有什么格式?
; +-------------------------------------------------------------------------+
; | This file is generated by The Interactive Disassembler (IDA)     |
; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com>     |
; | Licensed to: Mach EDV Dienstleistungen, Jan Mach, 1 user, adv, 11/2007  |
; +-------------------------------------------------------------------------+
;
; Input MD5   : 478E97815F30EE8CC8E17E9C01549D75

; File Name   : D:\ptools\LIU.COM
; Format      : MS-DOS COM-file
; Base Address: 0h Range: 100h-200h Loaded length: 100h

.386
.model tiny

; ===========================================================================

; Segment type: Pure code
seg000 segment byte public 'CODE' use16
assume cs:seg000
org 100h
assume es:nothing, ss:nothing, ds:seg000, fs:nothing, gs:nothing

; =============== S U B R O U T I N E =======================================

; Attributes: noreturn

public start
start proc near
push cs
pop ds
mov ax, 12h ; set video mode,640*480 16 color EGA mode
int 10h ; - VIDEO - SET VIDEO MODE
; AL = mode
cld
mov ax, 0A000h
mov es, ax
assume es:nothing
xor di, di

loc_10F: ; CODE XREF: start+3Dj
mov bp, di
mov si, 190h
mov cx, 10h
call Set_Show_CurLoc

loc_11A: ; CODE XREF: start+1Fj
movsb ; [si]->[di]
movsb ; [si]->[di]
add di, 4Eh
loop loc_11A
mov ah, 0
int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
; Return: AH = scan code, AL = character
cmp al, 0Dh
jz short @exit
mov di, bp
mov cx, 10h

loc_12E: ; CODE XREF: start+36j
mov word ptr es:[di], 0
add di, 50h
loop loc_12E
mov di, bp
add di, 50h
jmp short loc_10F
; ---------------------------------------------------------------------------

@exit: ; CODE XREF: start+27j
mov ax, 3 ; restore video mode,80*25 color mode
int 10h ; - VIDEO - SET VIDEO MODE
; AL = mode
mov ah, 4Ch
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
start endp ; AL = exit code


; =============== S U B R O U T I N E =======================================


Set_Show_CurLoc proc near ; CODE XREF: start+17p
mov ah, 2
mov bh, 0
mov dx, 1020h ; set cursor location to 10h row,20h column,page 0
int 10h ; - VIDEO - SET CURSOR POSITION
; DH,DL = row, column (0,0 = upper left)
; BH = page number
mov bl, 24h
mov dx, di
mov bh, dh
call Disp_Hex8
mov bh, dl
call Disp_Hex8
retn
Set_Show_CurLoc endp

; ---------------------------------------------------------------------------
db 8 dup(0)

; =============== S U B R O U T I N E =======================================


Disp_Hex8 proc near ; CODE XREF: Set_Show_CurLoc+Fp
; Set_Show_CurLoc+14p
mov al, bh
shr al, 1
shr al, 1
shr al, 1
shr al, 1
or al, '0'
cmp al, '9'
jbe short loc_17A
add al, 7

loc_17A: ; CODE XREF: Disp_Hex8+Ej
mov ah, 0Eh
int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
; AL = character, BH = display page (alpha modes)
; BL = foreground color (graphics modes)
mov al, bh
and al, 0Fh
or al, '0'
cmp al, '9'
jbe short loc_18A
add al, 7

loc_18A: ; CODE XREF: Disp_Hex8+1Ej
mov ah, 0Eh
int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
; AL = character, BH = display page (alpha modes)
; BL = foreground color (graphics modes)
retn
Disp_Hex8 endp

; ---------------------------------------------------------------------------
db    0
org 190h
db  20h
db    4
db  18h
db    4
db    9
db  24h ; $
db 0FFh
db 0A4h ; ?
db    2
db  24h ; $
db  42h ; B
db  24h ; $
db  22h ; "
db  24h ; $
db  14h
db  24h ; $
db  14h
db  24h ; $
db    8
db  24h ; $
db    8
db  24h ; $
db  14h
db  24h ; $
db  22h ; "
db    4
db  43h ; C
db    4
db  81h ; ?
db  14h
db    0
db    8
db  10h
db    0
db  10h
db  20h
db  10h
db  40h ; @
db  10h
db  84h ; ?
db 0FDh ; ?
db 0FEh ; ?
db  11h
db    4
db  31h ; 1
db    4
db  39h ; 9
db    4
db  55h ; U
db    4
db  51h ; Q
db 0FCh ; ?
db  91h ; ?
db    4
db  11h
db    4
db  11h
db    4
db  11h
db    4
db  11h
db 0FCh ; ?
db  11h
db    4
db    0
db  20h
db    0
db 0F0h ; ?
db  0Fh
db    0
db    8
db    0
db    8
db    0
db    8
db  10h
db  0Fh
db 0F8h ; ?
db    8
db  40h ; @
db    0
db    0
db    0
db    0
db 0FFh
db 0FEh ; ?
db    0
db    0
db    4
db  40h ; @
db  0Ch
db  30h ; 0
db  10h
db  18h
db  20h
db    8
db  5Bh ; [
db  31h ; 1
db  66h ; f
db  66h ; f
db  2Dh ; -
db  32h ; 2
db  35h ; 5
db  65h ; e
db  5Dh ; ]
db  6Ch ; l
db  62h ; b
db  62h ; b
db  2Eh ; .
db  64h ; d
db  6Fh ; o
db  74h ; t
seg000 ends
end start

#8


请问大侠,您的D:\ptools\LIU.COM那个com文件是咋来的?
对方只给那个bat文件,不知如何才能得到COM文件?
我用记事本将那些机器码保存成com文件,提示:
C:\liu1.com
NTVDM CPU 遇到无效的指令。
CS:0567 IP:0642 OP:ff ff 47 48 49 选择“关闭”终止应用程序。

#9


才看到的,转帖,美文共赏:
GOTO CITY 

E100  B8 13 00 CD 10 68 00 A0 07 68 00 90 0F A1 68 00 
E110  80 0F A9 B8 00 FF BA C8 03 EE 42 33 DB 8A C3 C0 
E120  F8 02 EE EE EE 64 88 27 4B 75 F2 66 33 D2 66 33 
E130  F6 B0 10 64 28 07 73 04 48 64 88 07 66 8B C6 05 
E140  75 00 66 0F AF D0 66 C1 FA 04 66 81 C2 7B 04 00 
E150  00 8A C2 25 03 00 75 02 FE CB 48 75 02 FE CF 48 
E160  75 02 FE C3 48 75 02 FE C7 66 46 66 81 FE 09 2E 
E170  02 00 75 BD BA DA 03 EC A8 08 74 FB 33 FF B9 00 
E180  7D 65 8B 05 65 89 2D AB E2 F7 B0 C8 BF 00 02 BB 
E190  80 02 89 01 4B 4B 75 FA B9 20 03 57 BD 3F 01 89 
E1A0  0C DF 04 8B C5 2D A0 00 C1 E0 04 99 F7 F9 DF 06 
E1B0  FE 01 D8 F1 DE 44 04 DB 1C 32 E4 8A 3C 8A D8 64 
E1C0  8A 07 05 80 00 89 04 DF 04 DE C9 DE 36 FC 01 DB 
E1D0  1C 8B 1C 39 1D 7C 0D 89 1D 2C 80 69 DB 40 01 03 
E1E0  DD 65 88 07 47 47 4D 75 B6 5F 49 83 F9 50 75 AB 
E1F0  FE 44 04 B4 01 CD 16 0F 84 79 FF C3 58 02 A0 0F 
E200  76 04 03 F3 26 89 94 24 04 26 89 84 22 04 83 FF 
G=100 

:CITY 
DEBUG<CITY.BAT 


把上面的代码保存为CITY.BAT,直接点击可以观看。 
注:这是我在一个论坛偶尔看到的,非常强! 
程序的名字叫"国度",运行以后你就知道是什么了. 

#10


xtdumpling和dididu1515大侠真是厉害!
在xtdumpling大侠不厌其烦的指点下,我现在知道com文件如何得到了,也知道如何得到汇编代码了
dididu1515大侠让我知道这个天是那么高!
学习!

希望还有bat文件的话,多发几个来,开开眼界

再一次感谢!!!

#11


更多精华请参阅:百度汇编吧掌门_blueglass2
http://hi.baidu.com/blueglass2

#12


请问老大:那里的代码我都调试不通过
比如http://hi.baidu.com/blueglass2/blog/item/6a9823d78a0e8cd5a144dfb1.html
下面的写法我在masmplus 1.2上面都没有办法调试通过,请问要什么编译器才行?谢谢先
PSet: push di  cx (我改成2句push di    push cx就没有问题了)
pop cx di (我改成2句pop cx   pop di就没有问题了)
@fow: repnz stosb)(这句我不知如何改?)
这样的写法,我没有见过,不知怎么回事呢


请教请教,谢谢先

#13


那里的代码我调试也通不过,解铃还需系铃人,得问blueglass2。
你还可到百度汇编吧下载BAT来反汇编。

#14


请问老大:“到百度汇编吧下载BAT来反汇编”===将bat文件变成汇编代码,有什么快捷的好办法?

#15


强~~
菜鸟路过

#16


神话啊

#17


路过   顶顶

#18


8086汇编语言显示‘刘’字,如何改成“张三”?如何修改字体的大小、字形、颜色?  

===这个问题还没有搞定,再一次请教,谢谢先!

#19


com文件比exe还简单。获得com文件一般生成exe之后转换,俺写过程序直接将.asm转成.com。

#20


俺写过程序直接将.asm转成.com。 

==请问怎么转呢?能不能共享一下
谢谢先!!

#21


.asm转成.com
需要一个汇编编译器。直接把汇编代码改成机器码。再去掉目标文件头256字节。把文件从257字节开始。
但是com对汇编代码有要求。不能分段。所有代码数据加栈都的在64K之内。

#22


另外回答一下你开始的问题。那个刘字其实是画出来的。如果你要改变字或者颜色。先在网格上画出来。记好每个网格坐标里边的颜色。在修改7楼的代码。用编译器编译一下。看一下机器码。在把机器码写在bat中就可以了。

#23


另一种汉字显示示例:文本方式下显示“清华大学”
http://tieba.baidu.com/f?kz=606563482

#24


下面这段是在3号文本模式中,动态彩色显示“张三”的代码。
把虚线内数据,保存为Xszs.bat,鼠标双击,可以观看。
---------------------------------------------
Goto Xszs

E100  E9 D8 00 11 02 00 00 79 A3 C1 7D D1 08 C2 B0 0C   
E110  A0 4D 7B 4F 6B 4F 73 4C 9E F2 B2 7B F1 C1 09 C9   
E120  B0 7A B0 D1 08 C1 A1 0C A0 25 91 E5 4D 27 91 79   
E130  B0 79 3E 01 0D 41 B7 42 75 C3 31 3C 30 C6 C5 D3   
E140  58 BE B0 06 B6 F6 B1 42 75 06 B6 A7 B1 8E FF 2A   
E150  A3 51 31 3C A0 C9 C5 CD 77 C7 87 C0 33 2C 77 C7   
E160  D6 C0 F7 86 3B 3C FF 8E 09 C9 B0 79 90 C6 43 6A   
E170  4C 4A 4D 4C 86 EA B2 4B 96 EB B2 78 B8 C1 1C 6A   
E180  52 3D 0A 1B B3 2D 18 C9 C5 3A 5C 69 B8 B5 4B 7A   
E190  B8 C1 83 08 52 3F FB B4 49 25 D0 FD AC B4 28 F2   
E1A0  70 4F 70 3B 11 C2 B1 E7 13 CD B0 60 B5 C0 96 62   
E1B0  BE C1 BE C6 83 01 0F C1 B1 78 ED C1 43 6A 04 8D   
E1C0  7D E0 10 EB B2 3F 70 B4 B2 3F 70 4B 50 70 B4 13   
E1D0  7C FB 74 B4 B2 3F 70 63 9A C3 73 E4 21 0C 02 E6   
E1E0  21 0E 1F 0E 8F 06 05 01 FA 33 C0 8E C0 BF 03 00   
E1F0  D1 E7 D1 E7 26 8B 05 87 06 03 01 26 89 05 47 47   
E200  26 8B 05 87 06 05 01 26 89 05 CC 8D 36 07 01 FF   
E210  E6 FB 0E 07 FC BE 0E 02 D1 EE 8B FE B9 D4 00 D1   
E220  E9 AD 35 C1 B0 AB E2 F9 FA CF 00 2A 20 41 42 43   
E230  44 20 2A
E233  09 FD 09 09 09 79 41 47 41 79 09 09 09 09 51 21
E243  00 08 08 10 20 40 04 FE 40 40 20 20 10 4E 84 00
E253  00 00 7F 00 00 00 00 3F 00 00 00 00 00 FF 00 00
E263  00 08 FC 00 00 00 10 F8 00 00 00 00 04 FE 00 00
E273  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


g=100
q

:Xszs
debug<Xszs.bat
------------------------------------------------------

#25


;●我修改后通过汇编,但无法运行●更多精华请参阅:百度汇编吧掌门_blueglass2 
;http://hi.baidu.com/blueglass2

.386P 
 data  segment
Org 100h
;=====================

Xpos dw 160
Ypos dw 100
rota dw 180
Xof dw 256
Yof dw 256
Zof dw 640
 box  dw word
dw -o,-o,-o
dw o,-o,-o
dw o, o,-o
dw -o, o,-o
dw -o,-o,o
dw o,-o,o
dw o, o,o
dw -o, o,o
p1 dw ?,?,?
p2 dw ?,?,?
p3 dw ?,?,?
p4 dw ?,?,?
p5 dw ?,?,?
p6 dw ?,?,?
p7 dw ?,?,?
p8 dw ?,?,?
Xdot dw ?
Ydot dw ?
lcnt dw ?
Xt dw ?
Yt dw ?
Zt dw ?
Xp dw ?
Yp dw ?
Zp dw ?
Xrot dw ?
Yrot dw ?
Zrot dw ?
tan dd ?
o equ 120
data  ends
;=====================
code Segment;●这程序好怪,Code中的C大写改小写就出现一系列错误
assume cs:code,ds:data,es:code;这两句离start:太远竟也发生错误
_start: 
mov ax,13h
int 10h
push 5000h
pop   fs
@main:push fs
pop es
xor eax,eax
xor di,di
mov ch,3eh
rep stosd
push cs
pop   es

mov cx,10
mov Zof,2400
sh: push cx
lea di, p1   ;对P1~P8分别赋值
lea si, box
mov cx,8
so:call update
loop so
call drwline
pop cx
sub Zof,200
loop sh

push fs ;0a000h
;pop es ds
xor si,si
xor di,di
mov ch,3eh
rep movsd
push cs ;cs
pop   ds ;es

call wtforVideo
jmp short @main
exit: mov ax,3
int 10h
int 20h

;==================
wtforVideo:
inc Xrot
inc Yrot
inc Zrot
mov dx,3dah
ta: in al,dx
test al,8
jnz ta
tb: in al,dx
test al,8
jz tb
in al,60h
cmp al,1
je exit
ret
;==================
drwline:
sl Macro a,b
mov ax,[a]
mov Xdot,ax
mov ax,[a+2]
mov Ydot,ax
mov bx,[b]
mov ax,[b+2]
call line
endm
sl p1,p2
sl p2,p3
sl p3,p4
sl p4,p1
sl p5,p6
sl p6,p7
sl p7,p8
sl p8,p5
sl p1,p5
sl p2,p6
sl p3,p7
sl p4,p8
ret
;==================
line:PUSHA ;input(Xdot=beginX Ydot=beginY bx=endX ax=endY)
mov cx, 1
mov dx, 140h
@0: sub bx, Xdot ;BX=deX
Jns @1
neg cx
neg bx
@1: sub ax, Ydot ;AX=deY
Jns @2
neg dx
neg ax
@2: cmp bx, ax
Ja @3
Xchg cx,dx ;swap(sdx,sdy)
Xchg ax,bx ;swap(dex,dey)
@3: mov lcnt, bx ;save(count)
cmp bx,1
jl e
cmp bx,379
jg e
shl ax, 1   ;2dY
mov di, ax   ;save 2dY
shl bx, 1   ;2dX
mov si, bx   ;save 2dX
mov bp,Ydot
imul bp,140h
add bp,Xdot
@p:mov byte ptr fs:[bp],52h
nodot: add bp,cx
cmp ax,bx
Jl @n
add bp,dx
sub ax, si
@n: 
add ax, di
dec lcnt
Jnz @p

e: POPA
ret
;=====================
sincos:
fldpi
fidiv rota
fimul word ptr [Xrot+bp]
fst tan
fsincos
fxch
fimul Zp
fistp Zt
fimul Yp
fisub Zt
fistp Yt
push Yt

fld tan
fsincos
fimul Zp
fistp Zt
fimul Yp
fiadd Zt
fistp Zp
pop Yp
ret
resincos:
add bp, 2
mov ax, Zp
xchg ax,Xp
xchg ax,Yp
xchg ax,Zp
call sincos
ret
;==================
update:
lodsw
mov Xp,ax
lodsw
mov Yp,ax
lodsw
mov Zp,ax
xor bp,bp
call sincos
call resincos
call resincos

mov bx, Zp
add bx,Zof

mov ax,Xp
imul Xof
idiv bx
add ax,Xpos
stosw ;send x

mov ax,Yp
imul Yof
idiv bx
add ax,Ypos
stosw ;send y

mov ax,Zp
stosw ;send z ;di+=6
ret

code ends
end  _start

 

#1



上面的代码还有几个问题:
Goto CaiLiu === 这个是啥意思?没有见过

e100  EB 1E 00 00 00 00 00 00 5C 48 5A 4B 31 36 00 6E == e100是不是debug里面的e命令+address?

g=100 === 这个是啥意思呢?

q === 这个是退出吗?

:CaiLiu === 不懂这个是干啥的?
Debug <CaiLiu.bat   ===这个呢?


请教请教,谢谢先

#2


这都是DOS批处理中文件中的指令 
Goto CaiLiu === 转向标号CaiLiu执行 

e100  EB 1E 00 00 00 00 00 00 5C 48 5A 4B 31 36 00 6E ==e100是e命令+address 

g=100 ===这个是DEBUG中的,从IP:100 执行

q ===是退出 

:CaiLiu === 标号 
Debug <CaiLiu.bat  ===这个让Debug从CaiLiu.bat文件中接收指令

#3


大字显示的例子:汇编_数字式_实时电子钟
http://tieba.baidu.com/f?kz=545929112

#4


我asm都忘记的差不多了.得重头学起了,不过以前有了基础,现在温故知新应该能领悟更多`

#5


不懂,帮顶

#6


不懂,up

#7


用IDA反汇编了一下,
mov si, 190h;190这个地方不懂??
往A000:0段写"显存"有什么格式?
; +-------------------------------------------------------------------------+
; | This file is generated by The Interactive Disassembler (IDA)     |
; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com>     |
; | Licensed to: Mach EDV Dienstleistungen, Jan Mach, 1 user, adv, 11/2007  |
; +-------------------------------------------------------------------------+
;
; Input MD5   : 478E97815F30EE8CC8E17E9C01549D75

; File Name   : D:\ptools\LIU.COM
; Format      : MS-DOS COM-file
; Base Address: 0h Range: 100h-200h Loaded length: 100h

.386
.model tiny

; ===========================================================================

; Segment type: Pure code
seg000 segment byte public 'CODE' use16
assume cs:seg000
org 100h
assume es:nothing, ss:nothing, ds:seg000, fs:nothing, gs:nothing

; =============== S U B R O U T I N E =======================================

; Attributes: noreturn

public start
start proc near
push cs
pop ds
mov ax, 12h ; set video mode,640*480 16 color EGA mode
int 10h ; - VIDEO - SET VIDEO MODE
; AL = mode
cld
mov ax, 0A000h
mov es, ax
assume es:nothing
xor di, di

loc_10F: ; CODE XREF: start+3Dj
mov bp, di
mov si, 190h
mov cx, 10h
call Set_Show_CurLoc

loc_11A: ; CODE XREF: start+1Fj
movsb ; [si]->[di]
movsb ; [si]->[di]
add di, 4Eh
loop loc_11A
mov ah, 0
int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
; Return: AH = scan code, AL = character
cmp al, 0Dh
jz short @exit
mov di, bp
mov cx, 10h

loc_12E: ; CODE XREF: start+36j
mov word ptr es:[di], 0
add di, 50h
loop loc_12E
mov di, bp
add di, 50h
jmp short loc_10F
; ---------------------------------------------------------------------------

@exit: ; CODE XREF: start+27j
mov ax, 3 ; restore video mode,80*25 color mode
int 10h ; - VIDEO - SET VIDEO MODE
; AL = mode
mov ah, 4Ch
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
start endp ; AL = exit code


; =============== S U B R O U T I N E =======================================


Set_Show_CurLoc proc near ; CODE XREF: start+17p
mov ah, 2
mov bh, 0
mov dx, 1020h ; set cursor location to 10h row,20h column,page 0
int 10h ; - VIDEO - SET CURSOR POSITION
; DH,DL = row, column (0,0 = upper left)
; BH = page number
mov bl, 24h
mov dx, di
mov bh, dh
call Disp_Hex8
mov bh, dl
call Disp_Hex8
retn
Set_Show_CurLoc endp

; ---------------------------------------------------------------------------
db 8 dup(0)

; =============== S U B R O U T I N E =======================================


Disp_Hex8 proc near ; CODE XREF: Set_Show_CurLoc+Fp
; Set_Show_CurLoc+14p
mov al, bh
shr al, 1
shr al, 1
shr al, 1
shr al, 1
or al, '0'
cmp al, '9'
jbe short loc_17A
add al, 7

loc_17A: ; CODE XREF: Disp_Hex8+Ej
mov ah, 0Eh
int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
; AL = character, BH = display page (alpha modes)
; BL = foreground color (graphics modes)
mov al, bh
and al, 0Fh
or al, '0'
cmp al, '9'
jbe short loc_18A
add al, 7

loc_18A: ; CODE XREF: Disp_Hex8+1Ej
mov ah, 0Eh
int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
; AL = character, BH = display page (alpha modes)
; BL = foreground color (graphics modes)
retn
Disp_Hex8 endp

; ---------------------------------------------------------------------------
db    0
org 190h
db  20h
db    4
db  18h
db    4
db    9
db  24h ; $
db 0FFh
db 0A4h ; ?
db    2
db  24h ; $
db  42h ; B
db  24h ; $
db  22h ; "
db  24h ; $
db  14h
db  24h ; $
db  14h
db  24h ; $
db    8
db  24h ; $
db    8
db  24h ; $
db  14h
db  24h ; $
db  22h ; "
db    4
db  43h ; C
db    4
db  81h ; ?
db  14h
db    0
db    8
db  10h
db    0
db  10h
db  20h
db  10h
db  40h ; @
db  10h
db  84h ; ?
db 0FDh ; ?
db 0FEh ; ?
db  11h
db    4
db  31h ; 1
db    4
db  39h ; 9
db    4
db  55h ; U
db    4
db  51h ; Q
db 0FCh ; ?
db  91h ; ?
db    4
db  11h
db    4
db  11h
db    4
db  11h
db    4
db  11h
db 0FCh ; ?
db  11h
db    4
db    0
db  20h
db    0
db 0F0h ; ?
db  0Fh
db    0
db    8
db    0
db    8
db    0
db    8
db  10h
db  0Fh
db 0F8h ; ?
db    8
db  40h ; @
db    0
db    0
db    0
db    0
db 0FFh
db 0FEh ; ?
db    0
db    0
db    4
db  40h ; @
db  0Ch
db  30h ; 0
db  10h
db  18h
db  20h
db    8
db  5Bh ; [
db  31h ; 1
db  66h ; f
db  66h ; f
db  2Dh ; -
db  32h ; 2
db  35h ; 5
db  65h ; e
db  5Dh ; ]
db  6Ch ; l
db  62h ; b
db  62h ; b
db  2Eh ; .
db  64h ; d
db  6Fh ; o
db  74h ; t
seg000 ends
end start

#8


请问大侠,您的D:\ptools\LIU.COM那个com文件是咋来的?
对方只给那个bat文件,不知如何才能得到COM文件?
我用记事本将那些机器码保存成com文件,提示:
C:\liu1.com
NTVDM CPU 遇到无效的指令。
CS:0567 IP:0642 OP:ff ff 47 48 49 选择“关闭”终止应用程序。

#9


才看到的,转帖,美文共赏:
GOTO CITY 

E100  B8 13 00 CD 10 68 00 A0 07 68 00 90 0F A1 68 00 
E110  80 0F A9 B8 00 FF BA C8 03 EE 42 33 DB 8A C3 C0 
E120  F8 02 EE EE EE 64 88 27 4B 75 F2 66 33 D2 66 33 
E130  F6 B0 10 64 28 07 73 04 48 64 88 07 66 8B C6 05 
E140  75 00 66 0F AF D0 66 C1 FA 04 66 81 C2 7B 04 00 
E150  00 8A C2 25 03 00 75 02 FE CB 48 75 02 FE CF 48 
E160  75 02 FE C3 48 75 02 FE C7 66 46 66 81 FE 09 2E 
E170  02 00 75 BD BA DA 03 EC A8 08 74 FB 33 FF B9 00 
E180  7D 65 8B 05 65 89 2D AB E2 F7 B0 C8 BF 00 02 BB 
E190  80 02 89 01 4B 4B 75 FA B9 20 03 57 BD 3F 01 89 
E1A0  0C DF 04 8B C5 2D A0 00 C1 E0 04 99 F7 F9 DF 06 
E1B0  FE 01 D8 F1 DE 44 04 DB 1C 32 E4 8A 3C 8A D8 64 
E1C0  8A 07 05 80 00 89 04 DF 04 DE C9 DE 36 FC 01 DB 
E1D0  1C 8B 1C 39 1D 7C 0D 89 1D 2C 80 69 DB 40 01 03 
E1E0  DD 65 88 07 47 47 4D 75 B6 5F 49 83 F9 50 75 AB 
E1F0  FE 44 04 B4 01 CD 16 0F 84 79 FF C3 58 02 A0 0F 
E200  76 04 03 F3 26 89 94 24 04 26 89 84 22 04 83 FF 
G=100 

:CITY 
DEBUG<CITY.BAT 


把上面的代码保存为CITY.BAT,直接点击可以观看。 
注:这是我在一个论坛偶尔看到的,非常强! 
程序的名字叫"国度",运行以后你就知道是什么了. 

#10


xtdumpling和dididu1515大侠真是厉害!
在xtdumpling大侠不厌其烦的指点下,我现在知道com文件如何得到了,也知道如何得到汇编代码了
dididu1515大侠让我知道这个天是那么高!
学习!

希望还有bat文件的话,多发几个来,开开眼界

再一次感谢!!!

#11


更多精华请参阅:百度汇编吧掌门_blueglass2
http://hi.baidu.com/blueglass2

#12


请问老大:那里的代码我都调试不通过
比如http://hi.baidu.com/blueglass2/blog/item/6a9823d78a0e8cd5a144dfb1.html
下面的写法我在masmplus 1.2上面都没有办法调试通过,请问要什么编译器才行?谢谢先
PSet: push di  cx (我改成2句push di    push cx就没有问题了)
pop cx di (我改成2句pop cx   pop di就没有问题了)
@fow: repnz stosb)(这句我不知如何改?)
这样的写法,我没有见过,不知怎么回事呢


请教请教,谢谢先

#13


那里的代码我调试也通不过,解铃还需系铃人,得问blueglass2。
你还可到百度汇编吧下载BAT来反汇编。

#14


请问老大:“到百度汇编吧下载BAT来反汇编”===将bat文件变成汇编代码,有什么快捷的好办法?

#15


强~~
菜鸟路过

#16


神话啊

#17


路过   顶顶

#18


8086汇编语言显示‘刘’字,如何改成“张三”?如何修改字体的大小、字形、颜色?  

===这个问题还没有搞定,再一次请教,谢谢先!

#19


com文件比exe还简单。获得com文件一般生成exe之后转换,俺写过程序直接将.asm转成.com。

#20


俺写过程序直接将.asm转成.com。 

==请问怎么转呢?能不能共享一下
谢谢先!!

#21


.asm转成.com
需要一个汇编编译器。直接把汇编代码改成机器码。再去掉目标文件头256字节。把文件从257字节开始。
但是com对汇编代码有要求。不能分段。所有代码数据加栈都的在64K之内。

#22


另外回答一下你开始的问题。那个刘字其实是画出来的。如果你要改变字或者颜色。先在网格上画出来。记好每个网格坐标里边的颜色。在修改7楼的代码。用编译器编译一下。看一下机器码。在把机器码写在bat中就可以了。

#23


另一种汉字显示示例:文本方式下显示“清华大学”
http://tieba.baidu.com/f?kz=606563482

#24


下面这段是在3号文本模式中,动态彩色显示“张三”的代码。
把虚线内数据,保存为Xszs.bat,鼠标双击,可以观看。
---------------------------------------------
Goto Xszs

E100  E9 D8 00 11 02 00 00 79 A3 C1 7D D1 08 C2 B0 0C   
E110  A0 4D 7B 4F 6B 4F 73 4C 9E F2 B2 7B F1 C1 09 C9   
E120  B0 7A B0 D1 08 C1 A1 0C A0 25 91 E5 4D 27 91 79   
E130  B0 79 3E 01 0D 41 B7 42 75 C3 31 3C 30 C6 C5 D3   
E140  58 BE B0 06 B6 F6 B1 42 75 06 B6 A7 B1 8E FF 2A   
E150  A3 51 31 3C A0 C9 C5 CD 77 C7 87 C0 33 2C 77 C7   
E160  D6 C0 F7 86 3B 3C FF 8E 09 C9 B0 79 90 C6 43 6A   
E170  4C 4A 4D 4C 86 EA B2 4B 96 EB B2 78 B8 C1 1C 6A   
E180  52 3D 0A 1B B3 2D 18 C9 C5 3A 5C 69 B8 B5 4B 7A   
E190  B8 C1 83 08 52 3F FB B4 49 25 D0 FD AC B4 28 F2   
E1A0  70 4F 70 3B 11 C2 B1 E7 13 CD B0 60 B5 C0 96 62   
E1B0  BE C1 BE C6 83 01 0F C1 B1 78 ED C1 43 6A 04 8D   
E1C0  7D E0 10 EB B2 3F 70 B4 B2 3F 70 4B 50 70 B4 13   
E1D0  7C FB 74 B4 B2 3F 70 63 9A C3 73 E4 21 0C 02 E6   
E1E0  21 0E 1F 0E 8F 06 05 01 FA 33 C0 8E C0 BF 03 00   
E1F0  D1 E7 D1 E7 26 8B 05 87 06 03 01 26 89 05 47 47   
E200  26 8B 05 87 06 05 01 26 89 05 CC 8D 36 07 01 FF   
E210  E6 FB 0E 07 FC BE 0E 02 D1 EE 8B FE B9 D4 00 D1   
E220  E9 AD 35 C1 B0 AB E2 F9 FA CF 00 2A 20 41 42 43   
E230  44 20 2A
E233  09 FD 09 09 09 79 41 47 41 79 09 09 09 09 51 21
E243  00 08 08 10 20 40 04 FE 40 40 20 20 10 4E 84 00
E253  00 00 7F 00 00 00 00 3F 00 00 00 00 00 FF 00 00
E263  00 08 FC 00 00 00 10 F8 00 00 00 00 04 FE 00 00
E273  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


g=100
q

:Xszs
debug<Xszs.bat
------------------------------------------------------

#25


;●我修改后通过汇编,但无法运行●更多精华请参阅:百度汇编吧掌门_blueglass2 
;http://hi.baidu.com/blueglass2

.386P 
 data  segment
Org 100h
;=====================

Xpos dw 160
Ypos dw 100
rota dw 180
Xof dw 256
Yof dw 256
Zof dw 640
 box  dw word
dw -o,-o,-o
dw o,-o,-o
dw o, o,-o
dw -o, o,-o
dw -o,-o,o
dw o,-o,o
dw o, o,o
dw -o, o,o
p1 dw ?,?,?
p2 dw ?,?,?
p3 dw ?,?,?
p4 dw ?,?,?
p5 dw ?,?,?
p6 dw ?,?,?
p7 dw ?,?,?
p8 dw ?,?,?
Xdot dw ?
Ydot dw ?
lcnt dw ?
Xt dw ?
Yt dw ?
Zt dw ?
Xp dw ?
Yp dw ?
Zp dw ?
Xrot dw ?
Yrot dw ?
Zrot dw ?
tan dd ?
o equ 120
data  ends
;=====================
code Segment;●这程序好怪,Code中的C大写改小写就出现一系列错误
assume cs:code,ds:data,es:code;这两句离start:太远竟也发生错误
_start: 
mov ax,13h
int 10h
push 5000h
pop   fs
@main:push fs
pop es
xor eax,eax
xor di,di
mov ch,3eh
rep stosd
push cs
pop   es

mov cx,10
mov Zof,2400
sh: push cx
lea di, p1   ;对P1~P8分别赋值
lea si, box
mov cx,8
so:call update
loop so
call drwline
pop cx
sub Zof,200
loop sh

push fs ;0a000h
;pop es ds
xor si,si
xor di,di
mov ch,3eh
rep movsd
push cs ;cs
pop   ds ;es

call wtforVideo
jmp short @main
exit: mov ax,3
int 10h
int 20h

;==================
wtforVideo:
inc Xrot
inc Yrot
inc Zrot
mov dx,3dah
ta: in al,dx
test al,8
jnz ta
tb: in al,dx
test al,8
jz tb
in al,60h
cmp al,1
je exit
ret
;==================
drwline:
sl Macro a,b
mov ax,[a]
mov Xdot,ax
mov ax,[a+2]
mov Ydot,ax
mov bx,[b]
mov ax,[b+2]
call line
endm
sl p1,p2
sl p2,p3
sl p3,p4
sl p4,p1
sl p5,p6
sl p6,p7
sl p7,p8
sl p8,p5
sl p1,p5
sl p2,p6
sl p3,p7
sl p4,p8
ret
;==================
line:PUSHA ;input(Xdot=beginX Ydot=beginY bx=endX ax=endY)
mov cx, 1
mov dx, 140h
@0: sub bx, Xdot ;BX=deX
Jns @1
neg cx
neg bx
@1: sub ax, Ydot ;AX=deY
Jns @2
neg dx
neg ax
@2: cmp bx, ax
Ja @3
Xchg cx,dx ;swap(sdx,sdy)
Xchg ax,bx ;swap(dex,dey)
@3: mov lcnt, bx ;save(count)
cmp bx,1
jl e
cmp bx,379
jg e
shl ax, 1   ;2dY
mov di, ax   ;save 2dY
shl bx, 1   ;2dX
mov si, bx   ;save 2dX
mov bp,Ydot
imul bp,140h
add bp,Xdot
@p:mov byte ptr fs:[bp],52h
nodot: add bp,cx
cmp ax,bx
Jl @n
add bp,dx
sub ax, si
@n: 
add ax, di
dec lcnt
Jnz @p

e: POPA
ret
;=====================
sincos:
fldpi
fidiv rota
fimul word ptr [Xrot+bp]
fst tan
fsincos
fxch
fimul Zp
fistp Zt
fimul Yp
fisub Zt
fistp Yt
push Yt

fld tan
fsincos
fimul Zp
fistp Zt
fimul Yp
fiadd Zt
fistp Zp
pop Yp
ret
resincos:
add bp, 2
mov ax, Zp
xchg ax,Xp
xchg ax,Yp
xchg ax,Zp
call sincos
ret
;==================
update:
lodsw
mov Xp,ax
lodsw
mov Yp,ax
lodsw
mov Zp,ax
xor bp,bp
call sincos
call resincos
call resincos

mov bx, Zp
add bx,Zof

mov ax,Xp
imul Xof
idiv bx
add ax,Xpos
stosw ;send x

mov ax,Yp
imul Yof
idiv bx
add ax,Ypos
stosw ;send y

mov ax,Zp
stosw ;send z ;di+=6
ret

code ends
end  _start