www.1862.net > 二号功能调用示例

二号功能调用示例

dos操作系统中,底层有很多驱动程序,为了使汇编语言程序开发效率更高,微软给出了一部分底层驱动程序接口供编程人员调用,这有点像C语言里的库函数,只要你按照一定格式调用,就能完成相应功能.汇编21号中断DOS功能调用功能非

;int 21 上世纪DOS下的功能调用,研究它意义不大了,不过还是写了一个;tasm+dosbox通过assume cs:code,ds:code code segment org 100Hstart: mov bx,cs mov ds,bx mov es,bx mov si,offset buffloop1: mov dl,[si]; or dl,dl jz exit mov ah,2 int 21h inc si jmp loop1exit: mov ax,4c00h int 21h buff: db "hello world!",0dh,0ah,0 code endsend start

DL 所赋的值应是 ASCii 码,才能正常显示字符.2 号 dos 功能调用不会帮你转ASCii码的.在汇编环境中,有的可直接 用比如 'a' (小写字母a)给 DL 赋值,“汇编程序”会将其转为 ASCii 码,那不是 2号dos功能转换的,切记.

code segment assume cs:code start: push ds sub ax,ax push ds mov cx,26 mov al,40hrepeat: inc al mov dl,al mov ah,2 int 21h dec cx jnz repeat mov ah,4ch int 21h retcode ends end start

data segment msg1 db "input two num",'$',0dh,0ah num db 0,0 msg2 db "the result is:",'$',0d,0ah data ends code segment start:mov si,offset num mov cx,2 mov dx,offset msg1 mov ah,09h int 21h jm:mov ah,01 int 16h sub al,30h mov byte ptr

调用Show2BCD就能实现将二位压缩的BCD码转换为非压缩的BCD码存放到SI所指的存储区中,并显示,完整程序如下: .modle small,c .codeBCDS DB 2 DUP(?)Main PROC PUSH CS POP DS LEA SI,BCDS MOV AL,23H ;这是压缩的BCD

在 debug 环境 所有的立即数 只能采用16进制数.要输出的字符,只能采用 16进制的ASCii码.

(7)、功能09H功能描述:输出一个字符串到标准输出设备上.如果输出操作被重定向,那么,将无法判断磁盘已满入口参数:AH=09HDS:DX=待输出字符的地址说明:待显示的字符串以'$'作为其结束标志出口参数:无我写的一个例子:

在调用2号功能之前,需要先调用0号功能设置显示模式,你可以在你程序前面再加两句: mov ax, 0002 int 10

. mov cx,5 ;循环次数 mov ah,1 loop1: int 21h ;读字符 push ax loop loop1 ;循环五次(cx中确定的次数) ;以下部分为输出 mov cx,5 loop2: mov ah,2 ;向标准控制台输出的调用号 pop dx int 21h loop loop2 mov ax,4c00h ;退出程序.程序结束时,一定记着写这个.4cH是退出,00是退出码,一般常用00当作正确退出.如果想告诉其它程序是异常退出,一般用0ffh(-1)等表示. int 21h

网站地图

All rights reserved Powered by www.1862.net

copyright ©right 2010-2021。
www.1862.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com