功能(于是,我们有256*256=65536个功能调用)。一般情况下使用AH寄存器,但是一些情况下可能使用另外的寄存器。通常,其他的寄存器是用来传递数据和参数的。 下面的例子调用了 INT 10h中断0Eh子功能输出字符串‘Hello!'。这个功能作用是在屏幕上显示一个字符,然后光标进一,如果需要还滚屏。
#MAKE_COM# ; 生成com文件的指令 ORG 100h ;我们使用的这个子功能没有返回值, ;所以我们只用设置就可以了。 MOV AH, 0Eh ; 选择子功能 ;int 10h/0eh 子功能,输出放在 ;AL寄存器中的ASCII码对应的字符 MOV AL, 'H' ; ASCII码: 72 INT 10h ; 输出 MOV AL, 'e' ; ASCII 码: 101 INT 10h ; 输出 MOV AL, 'l' ; ASCII 码: 108 INT 10h ; 输出 MOV AL, 'l' ; ASCII 码: 108 INT 10h ; 输出 MOV AL, 'o' ; ASCII 码: 111 INT 10h ; 输出 MOV AL, '!' ; ASCII 码: 33 INT 10h ; 输出 RET ; 返回操作系统 将上述程序拷贝粘贴到Emu8086代码编辑器,点击 [Compile and Emulate] 按钮,运行!
常用函数库 - emu8086.inc
通过引用一些常用函数,可以使你编程更加方便。在你的程序中使用其他文件中的函数的方法是
INCLUDE后面接上你要引用的文件名。编译器
会自动在你源程序所在的文件夹中查找你引用的文件,如果没有找到,它将搜索Inc 文件夹。通常你无法完全理解 emu8086.inc(位于Inc文件夹)但是这没有关系,你只用知道它能做什么就足够了。要使用emu8086.inc中的函数,你应当在你程序的开头加上 include 'emu8086.inc' emu8086.inc 定义了如下的宏:
PUTC char - 将一个ascii字符输出到光标当前位值,只有一个参数的宏 GOTOXY col, row - 设置当前光标位置,有两个参数 PRINT string - 输出字符串,一个参数
PRINTN string - 输出字符串,一个参数。与print功能相同,不同在于输出之后自动回车 CURSOROFF - 关闭文本光标 CURSORON - 打开文本光标
使用上述宏的方法是:在你需要的位值写上宏名称加上参数。例如:
include emu8086.inc ORG 100h PRINT 'Hello World!' GOTOXY 10, 5 PUTC 65 ; 65 - ASCII 码的 'A' PUTC 'B' RET ; 返回操作系统 END ; 停止编译器 当编译器运行你的代码时,它首先找到声明中的emu8086.inc文件,然后将代码中的宏用实际的代码替换掉。通常来说,宏都是比较小的代码段,经常使用宏会使得你的可执行程序特别大(对于降低文件大小来说使用过程更好) emu8086.inc 同样定义了如下过程:
PRINT_STRING - 在当前光标位置输出一个字符串字符串地址由DS:SI 寄存器给出使用
时,需要在END前面声明DEFINE_PRINT_STRING 才能使用.
PTHIS - 在当前光标位置输出一个字符串(同 PRINT_STRING)一样,不同之处在于它从
堆栈接收字符串。字符串终止符
应在call之后定义。例如
CALL PTHIS
db 'Hello World!', 0
使用时,需要在 END 前面声明
DEFINE_PTHIS 。GET_STRING - 从用户输入得到一个字符串,输入的字符串写入 DS:DI 指出的缓冲,缓冲区的大小由 DX设置。回车作为输入结束。使用时,需要在END前面声
明
DEFINE_GET_STRING 。CLEAR_SCREEN - 清屏过程(滚过整个屏幕),然后将光标设置在左上角. 使用时,需要在END前面声明DEFINE_CLEAR_SCREEN 。
SCAN_NUM - 取得用户从键盘输入的多位有符号数,并将输入存放在CX寄存器。 使用时,需要在 END前面声明 DEFINE_SCAN_NUM。
PRINT_NUM - 输出AX寄存器中的有符号数。使用时,需要在END 前面声明 DEFINE_PRINT_NUM以及 DEFINE_PRINT_NUM_UNS.
PRINT_NUM_UNS - 输出AX寄存器中的无符号数。使用时,需要在END 前面声明DEFINE_PRINT_NUM_UNS.
使用上述过程,必须在你源程序的底部(但是在END之前!!!)声明这些函数,使用CALL指令后面接上过程名称来调用。例如:
include 'emu8086.inc' ORG 100h LEA SI, msg1 ; 要求输入数字 CALL print_string ; CALL scan_num ; 读取数字放入cx MOV AX, CX ; CX存放数值拷贝到AX; 输入如下字符 CALL pthis DB 13, 10, 'You have entered: ', 0 CALL print_num ; 输出 AX中的字符 RET ; 返回操作系统
相关推荐: