DOS功能调用——单个字符及字符串的输入输出

DOS系统功能调用步骤:
    1. AH <- 功能号
    2.指定寄存器放入该功能所要求的入口参数
    3.执行int 21H
    4.分析出口参数

单字符输入输出

01h键盘输入            AL=输入字符
    02h显示器输出            DL=输出字符
    07h直接控制台输入(无回显)    AL=输入字符
    08键盘输入(无回显)        AL=输入字符
======================汇编例子======================
data segment
s db 1
data ends
prog segment
    main proc far
    assume cs:prog, ds:data
start:
    mov ax,data
    mov ds,ax

mov ah,01h    
    int 21h                   ;获取输入的单个字符

mov bx,offset s
    mov byte ptr ds:[bx],al    ;必须是bx,寄存器间接寻址,把获取的字符存到s

mov dl,0ah
    mov ah,02h
    int 21h                    ;输出换行符

mov dl,s
    mov ah,02h
    int 21h                    ;输出刚才获取到的字符

mov ax,4c00h
    int 21h
    main endp
prog ends
end start

字符串输入输出
    
    09h显示字符串                    DS:DX=字符缓冲区首地址
    0ah带缓冲的键盘输入(字符串)    DS:DX=键盘缓冲区首地址

0ah功能要求用户指定一个输入缓冲区来存放字符。缓冲区一般定义在数据段,其定义格式有严格的要求,如下的结构。第一个字节为用户自定义的缓冲区长度,若输入的字符数(包括回车符)大于此值,则喇叭会发出嘟嘟的警告生,并且光标不再右移直到输入回车符为止;第二个字节为实际输入的字符数(不包括回车符),有0ah号功能自动填入;DOS从第三个字节开始存放输入的字符。
        
        |缓冲区长度N|实际读入的字符数|DOS从键盘读入的字符|
        1        2             3             N+2
        |----------------N+2个字节的缓冲区---------------|

09h显示字符串功能。09h号功能是DOS调用独有的,该功能要求被显示的字符串必须已‘$‘字符作为结束符。调用该功能前若有输入,则应在调用该功能之前输出换行符,否则输出会覆盖输入的一行。如本例若不换行则看不出输出的结果。

======================汇编例子======================

data segment
buf    db 50
len    db ?
chars    db 50 dup(?)    ;定义52个字节的缓冲区
data ends
prog segment
    main proc far
    assume cs:prog, ds:data
start:
    mov ax,data
    mov ds,ax

lea dx,buf
    mov ah,0ah
    int 21h        ;字符串输入

mov dl,0ah    
    mov ah,02h
    int 21h        ;换行,否则显示的行会覆盖输入时的行,看不出输出

xor ch,ch
    mov cl,len
    mov dx,offset chars
    mov bx,dx
    add bx,cx
    mov byte ptr [bx],‘$‘
    mov ah,09h
    int 21h        ;显示字符串

mov ax,4c00h
    int 21h
    main endp
prog ends
end start

时间: 2024-10-25 08:27:30

DOS功能调用——单个字符及字符串的输入输出的相关文章

x01.os.5: DOS 功能调用

DOS 功能调用(INT 21)-------------------------------AH = 0-2E 适用 DOS 1.0 以上版本AH = 2F-57 适用 DOS 2.0 以上版本AH = 58-62 适用 DOS 3.0 以上版本------------------------------- AH = 00功能:程序终止(同 INT 20h)调用参数: CS = 程序段前缀 AH = 01功能:键盘输入并回显返回参数: AL = 输入字符 AH = 02功能:显示输出调用参数:

汇编相关(ASCII码字符表 DEBUG命令 BIOS功能调用表 DOS功能调用表 汇编语言错误信息表)

汇编相关 一些关于汇编的常用东西,包括: ASCII码字符表 DEBUG命令 BIOS功能调用表 DOS功能调用表 汇编语言错误信息表 ASCII码字符表 DEBUG命令 BIOS功能调用表 DOS功能调用表 汇编语言错误信息表

UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)

POINT: 关于表示一个编码:利用code字符数组表示一个编码字符,其中code[len][val]表示长度为len,二进制值为val的字符: 主程序如下: 1 #include <iostream> 2 #include <sstream> 3 #include <cstdio> 4 #include <cstring> 5 #include <cmath> 6 #include <string> 7 #include <v

DOS功能的调用

DOS功能的调用:主要包含三方面的子程序:设备驱动(基本I/O),文件管理和其他(包括内存管理,自取时间,自取终端向量,总之程序等)随着DOS版本的升级,这种DOS功能调用的子程序数量也在不断的增加,功能恶搞更加完备,使用也更加方便 调用的方法 可以按照下面方法调用DOS功能 [1]根据需调用的功能调用准备入口参数,有部分调用是不需要入口参数的,但是大部分的功能调用需要入口参数,在调用前应该准备好入口参数 [2]把功能调用号送到AH [3]发软中断指令INT 21H 基本的I/O的调用 1:带回

第二节 数值、字符与字符串

数值:在电脑中以二进制的方式存储的 字符:也是二进制方式在电脑上存储的,但是与数值不通,字符是以编码形式来显示的, 例如:ASC|| 码 GB2312.UTF8等 字符串:是有一个或多个字符组合起来的,编译器会默认在字符串末尾加上‘\0’(\0表示是结尾) 数值和字符比较 1.存储空间  2.意义差别 数值                       字符串 十进制:65535                     "121" 计算机中:1111 1111 1111 1111    

字符串中单个字符的用法

我们使用字符串时经常要对字符串中单个字符进行处理,比如检测一个string对象是否包含空白,或者把string对象中的字母大写改为小写,查看某个特定字符是否出现,判断字符串是否为数字等等. 这类处理的关键是要获取字符本身.有时需要处理string对象中的每一个字符,另外一些时候则只需处理某个特定的字符,还有些时候遇到某个条件处理就要停下来. 在cctype头文件中定义了一组标准库函数处理字符串的工作. cctype头文件中的函数 isalnum(c)    当c是字母或数字时为真 isalpha

C++【String类】String查找单个字符,查找字符串的函数实现

#include<iostream> #include<stdlib.h> #include<assert.h> using namespace std; class String { public:     String(const char* str)         :_str(new char[strlen(str) + 1])     {         _size = strlen(str);         _capacity = _size + 1;  

C++【String类】String删除单个字符,删除字符串的函数实现

#include<iostream> #include<stdlib.h> #include<assert.h> using namespace std; class String { public:     String(const char* str)         :_str(new char[strlen(str) + 1])     {         _size = strlen(str);         _capacity = _size + 1;  

C++【String类】String插入单个字符,插入字符串的函数实现

#include<iostream> #include<stdlib.h> #include<assert.h> using namespace std; class String { public:     String(const char* str)         :_str(new char[strlen(str) + 1])     {         _size = strlen(str);         _capacity = _size + 1;