MOV AH,0AH怎么使用,我 MOV AH,0AH INT 21H MOV AH,9 INT 21H MOV AH,4CH INT 21H 我这样不行吗?

我是要将输入的字符再显示出来

MOV AH,0AH
INT 21H
确实是输入一个字符串的指令,可是需要注意的是,使用这个指令的时候需要设置一些东西,否则的话,使用的时候会出错。在这儿解释一下INT 21H里的0Ah功能:输入一个字符串到DS:DX,第一个字节是buffer的大小,第二个字节是实际需要读的字符串的字符个数。而且这个指令不需要在字符串最后加'$',要使用INT 21H/AH=9号功能打印的话,你必须要在字符串的最后加上'$',而且打印的起始地址为DS:DX+2.
举个例子:

org 100h
mov dx, offset buffer
mov ah, 0ah
int 21h
jmp print
buffer db 10,?, 10 dup(' ')
print:
xor bx, bx
mov bl, buffer[1]
mov buffer[bx+2], '$'
mov dx, offset buffer + 2
mov ah, 9
int 21h
ret
需要注意的就是这些,希望能帮到你
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-12
;================================================
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
MSG1 DB 'Input a STR : $'
CRLF DB 0DH, 0AH, '$'
MSG2 DB 'The STR is : $'
;----------------------------------
BUFSIZE DB 50 ;最多可键入50个字符.
ACTLEN DB ? ;实际键入的字符数.
CHARS DB 50 DUP(20H) ;实际键入的字符从此开始存放.
DATA ENDS
;----------------------------------
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX

MOV DX, OFFSET MSG1
MOV AH, 9
INT 21H
MOV DX, OFFSET BUFSIZE ;键入缓冲区起始偏移地址送DX
MOV AH, 0AH
INT 21H ;输入字符串并送入缓冲区.
;-----------------------
MOV CL, ACTLEN ;取得输入的字符数.
ADD CL, 0
JNZ OK ;长度不为零就去输出.
JMP EXIT_MAIN
;-----------------------
OK:
MOV DX, OFFSET CRLF
MOV AH, 9
INT 21H
MOV DX, OFFSET MSG2
MOV AH, 9
INT 21H
;-----------------------
XOR CX, CX
MOV CL, ACTLEN ;取得输入的字符数.
MOV DX, OFFSET CHARS ;输入的字符串起始地址送DX
MOV BX, DX ;将字符串首地址送BX
ADD BX, CX ;取到字符串尾地址.
MOV BYTE PTR [BX], '$' ;在字符串尾插$
MOV AH, 09H ;字符串显示功能.
INT 21H ;显示键入的字符串.
EXIT_MAIN:
MOV AH, 4CH
INT 21H ;返回DOS
;----------------------------------
CODE ENDS
END START
;================================================

参考:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/5adeb99125d2159ba877a4ae.html追问

呵呵,谢谢哈!不过我觉得程序有点复杂,可不可以弄简单一点~~~

第2个回答  2011-11-12
INTn(n:0-255) 功能:称为软中断指令。就一般情况而言,这个指令都是在程序要结束时使用的,故简单地说,这个中断调用指令就是告诉程序当程序里的指令MOV AH,0AH INT 21H执行完毕后要做什么——返回DOS,此时程序就会结束,所以在程序执行到第一个INT 21H语句时即停止编译显示出错。追问

不是很懂,MOV AH,0AH INT 21H指令不是输入多个字符指令吗

第3个回答  2011-11-12
MOV AH,0AH
INT 21H
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H追问

刚刚运行了,可还是不行,跟我运行的结果是一样的,是不是不支持XP系统呀

追答

我也不太清楚,好久不用这个了。

MOV AH,0AH怎么使用,我 MOV AH,0AH INT 21H MOV AH,9 INT 21H MOV AH...
而且这个指令不需要在字符串最后加'$',要使用INT 21H\/AH=9号功能打印的话,你必须要在字符串的最后加上'$',而且打印的起始地址为DS:DX+2.举个例子:org 100h mov dx, offset buffer mov ah, 0ah int 21h jmp print buffer db 10,?, 10 dup(' ')print:xor bx, bx mov bl, buffer...

mov ah,4ch int21h,什么意思?
mov ah,4ch int 21h,简单的说,mov ah就是结束程序,4ch int 21h返回操作系统。在INT 21H功能调用中,只需要将AH设置成功能编号,其他寄存器设置该功能号所规定的参数,执行INT 21H指令即可完成所需的功能。INT是interupt中断的缩写,INT 21H是指DOS汇编语言的中断调用命令,最常用的包括:01H、07H和...

汇编程序中int 21H 的功能是什么?
(DS:DX+1)=实际输入的字符数 0B 检验键盘状态 AL=00 有输入 AL=FF 无输入 0C 清除输入缓冲区并 请求指定的输入功能 AL=输入功能号 (1,6,7,8,A)0D 磁盘复位 清除文件缓冲区 0E 指定当前缺省的磁盘驱动器 DL=驱动器号 0=A,1=B,...AL=驱动器数 0F 打开文件 DS:DX=FCB首地址 AL...

关于mov ah,4ch和int 21 h
int 21h为21h号中断没错,之所以返回的是dos是由mov ah,4ch决定的,你可以将ah看做是一个函数调用的参数,如果懂c语言的话,这句话可等效为 INT_21h( 4ch);问题2,中,AX传给IP?本来可以通过MOV IP,ax指令操作,然而由于IP记录着程序的下一条指令,改了这个很肯能会导致程序崩溃,我没猜错...

汇编语言代码如下:MOV AH,4CH INT 21H我知道后面的INT 21H是调用dos
mov ah,4ch 是向A寄存器高字节ah赋值16进制数4c。此语句和int 21h 组合成一个完整的中断调用功能。int 表示中断,中断有很多种类,其中21h表示DOS系统的系统调用中断这一大类,下面还分了很多小类,小类的选择是放在ah寄存器中的。2个语句组合表示这个中断是21h大类中的4c小类。类似于(21h)年级 (...

汇编中INT 21H是什么意思?
INT是interupt中断的缩写,INT 21H是指DOS的中断调用命令,最常用的包括:01H、07H和08H —从标准输入设备输入字符 02H —字符输出 03H —辅助设备的输入 04H —辅助设备的输出 05H —打印输出 06H —控制台输入\/输出 09H —显示字符串 0AH —键盘缓冲输入 0BH —检测输入状态 0CH —清输入缓冲...

汇编中MOV AH,02H int 21h输出的DL吗?
MOV AH,02H 是给AH赋值02H,是显示字符的作用,MOV DL, 08H 是表示显示的字符的ASCII码是08H,INT 21H是是DOS的中断调用,整个语句的意思很简单,就是在屏幕上显示08H。汇编博大精通,好好学啊。

汇编语言程序设计题目,在线等答案!!!急!
MOV DS, AX MOV AL, A ;取来A SUB AL, B ;减去B JB FU ;不够减转移.LEA DX, MSG1 ;够减就显示A>=B JMP DISP FU:LEA DX, MSG2 DISP:MOV AH, 9 ;显示字符串.INT 21H MOV AH, 4CH INT 21H CODE ENDS END START ...

输入一个字符串,要求输出第一个字母和第一个数字,如输出的是q或Q表示...
mov ah,9 int 21h EndM;---; 功能:输出一个字符 ; 入口:dl=要显示的字符 Output_Chr proc Near push ax mov ah,02h int 21h pop ax ret Output_Chr endp ;--- ; 功能:取光标位置; 入口:无; 出口:DH=行号,DL=列号GetCursor Proc Near PUSH AX PUSH BX PUSH CX XOR BX,BX MOV AH,3...

汇编语言实现四则运算
int 21h mov dl,0ah int 21h pop dx pop ax retenter_CTLF endp ;---; 功能:输出一个字符 ; 入口:dl=要显示的字符 enter_Chr proc Near push ax mov ah,02h int 21h pop ax ret enter_Chr endp ;---; 功能:键盘输入一个N位的十进制数字,; 用逻辑和移位指令将其转换成二进制数并保存...

相似回答