※ 还记得 ASCII 码?现在,我们来剖析一个可以将所有的 ASCII
码显示在萤幕上的程式。
※ 请将存在磁碟中的程式 ASCII.COM 载入并执行。
1.请输入 DEBUG ASCII.COM
2.请输入 U100,10E
1FED:0100 B90001 MOV CX,0100
1FED:0103 B200 MOV DL,00
1FED:0105 B402 MOV AH,02
1FED:0107 CD21 INT 21
1FED:0109 FEC2 INC DL
1FED:010B E2F8 LOOP 0105
1FED:010D CD20 INT 20
-
※ INC∶递增指令,每次将资料暂存器 DL 内的数值加 1 。
※ LOOP∶回圈指令,将执行次数放入计数暂存器 CX 中,每执行
一次 LOOP 指令,CX 的内容值减 1 ,并跳回回圈的开头位址
(105),直到 CX 为 0 。
1.请输入 G
※ 当我们想在萤幕上任意地显示字串(例如∶开机时电脑会向您
问侯),则可以使用 DOS 的 9H 号函数服务常式。
※ 请输入下列程式,存入磁碟(HALLO.COM)中,并执行看看∶
1.请输入 A100 3.请输入 MOV AH,9
2.请输入 MOV DX,109 4.请输入 INT 21
5.请输入 INT 20
6.请输入 DB 'HOW ARE YOU, SU$'
※ 列印字串功能∶DOS 的 09h 号函数服务。
※ 输入∶AH=9DS X = 字串的启始位址
※ 执行∶INT21结果∶字串显示在萤幕上
DX∶字串的偏移位址,即实际的启始位址。
DS∶字串的段位址,DEBUG 会自动检查其值,目前不必管它。
※ 在组合语言中,有两种不同的指令∶
1.正规指令∶如 MOV 等,是属於微处理机的指令,用来告诉 8088
微处理机在程式执行时应做些什麽,所以它会以运
算码(OP-code)的方式存入记忆体中。
2.虚拟指令∶如 DB 等,是属於 DEBUG 等组译器的指令,用来
告诉组译器在组译程式时应做些什麽。
※ DB(Define Byte)指令用来告诉 DEBUG 将其後面单引号内的
所有字元对应的位元组(ASCII 码)放入记忆体中。
※ 使用 9H 功能列印的字串必须以 $ 符号结尾。
※ 想查看 DB 虚拟指令将那些位元组放入记忆体时,使用U命令
并没有太大的用处,此时改用D命令则可得到较佳的效果。
5.请输入 U100,118
6.请输入 D100,17F
1FED:0100 BA0901 MOV DX,0109
1FED:0103 B409 MOV AH,09
1FED:0105 CD21 INT 21
1FED:0107 CD20 INT 20
1FED:0109 48 DEC AX
1FED:010A 6F DB 6F
1FED:010B 7720 JA 012D
1FED:010D 61 DB 61
1FED:010E 7265 JB 0175
1FED:0110 20796F AND [BX+DI+6F],BH
1FED:0113 752C JNZ 0141
1FED:0115 205355 AND [BP+DI+55],DL
1FED:0118 2400 AND AL,00
-
1FED:0100 BA 09 01 B4 09 CD 21 CD-20 48 6F 77 20 61 72 65 ......!. How are
1FED:0110 20 79 6F 75 2C 20 53 55-24 00 00 00 00 00 00 00 you, SU$.......
1FED:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1FED-