![]() | 第4章 奇妙的声音 | -65- | |||||||||||||||||||
main code |
endp ends end |
main |
|||||||||||||||||||
程序并不复杂,先显示一个字符串,再分别显示"回车"和"换行",注意"回车"和"换行"是以"字"的形式定义在内存中的。那么程序又是如何应用这一个字的数据呢? 指令"MOV DL,CRLF"和"MOV DL,CRLF+1"清楚地反映了程序的意图:为适应DOS的要求,我们只能将这个"字"拆成"字节",每次取出八位数据。从表面上看程序并没有错误,但实际上这样的程序无法编译,下面是我用TASM编译这个程序时出现的错误: C:\ASM\>TASM TEMP[Enter] Turbo Assembler Version 3.2 Copyright (c) 1988, 1992 Borland International Assembling file: temp.ASM **Error** temp.ASM(13) Operand types do not match **Error** temp.ASM(15) Operand types do not match Error messages: 2 Warning messages: None Passes: 1 Remaining memory: 459k 给出的错误信息告诉我们"运算类型不等"。看来实际情况并非如想象中那样,编译程序比我们人类要"呆"得多。如何使程序正确编译呢? 一种方法,改用DB伪指令定义数据。将第七行改写成"CRLF DB 0DH,0AH";另一种方法就是用"PTR"操作符。 |
|||||||||||||||||||||
PTR | |||||||||||||||||||||
这个操作符用于显式地指示操作数的类型,它的使用很简单:"type PTR 目的地址" | |||||||||||||||||||||
code main msg crlf start: |
segment assume org proc jmp db dw mov mov int mov mov int |
cs:code 100h far short start 'Hello,World!',24h 0d0ah ah,9 dx,offset msg 21h ah,2 dl,byte ptr crlf 21h |
|||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |