汇编输入输出(单个字符以及字符串)

来源:互联网 发布:淘宝双十一打几折 编辑:程序博客网 时间:2024/06/07 22:25

简单的汇编代码演示

      • 简单的汇编代码演示
        • 1输入输出
          • 1 INT 16HROM BIOS中断
          • 1 INT 21HDOS中断
        • 2字符串的输入

1、输入输出

输入输出主要有两个中断调用,分别为INT 16H 和INT 21H

1.1 INT 16H(ROM BIOS中断)

原理:
16H中断服务子程序提供了多个功能,每个功能对应一个功能号码,调用他们的方法是

功能号->AHINT 16H
功能号 功能 返回参数 0 等待从键盘读字符 AL=字符的ASCII码,AH=扫描码 1 读键盘缓冲区字符 若ZF=1,表示缓冲区空;否则表示缓冲区不空,则AL=ASCII值,AH=扫描码 2 返回键盘状态字 AL=键盘状态字节

相关示例代码(可以跑起来):

主要是从键盘中读取一个字符

DATAS  SEGMENT    CHAR DB ?DATAS  ENDSSTACKS  SEGMENT      DB  128 DUP (?)STACKS  ENDSCODES  SEGMENT     ASSUME    CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS    MOV DS,AX    MOV AH,0    ;进行输入    INT 16H    MOV CHAR,AL    mov AH,2    ;进行输出    MOV DL,CHAR    INT 21H    MOV AH,4CH    INT 21HCODES  ENDS    END  START
1.1 INT 21H(DOS中断)

原理:
功能号发送AH寄存器,调用参数所求的位置,然后发送INT 21H系统功能调用中断
主要的功能号如下图所示:

功能号 调用参数 说明 1 AL=输入字符串的ASCII值 等待从标准输入设备(通常为键盘)输入一个字符,把接受到的字符的ASCII码值送给AL,并显示到显示器的当前光标位置。该功能识别Ctrl-C键并做相应处理 2 DL=输出字符的ASCII值 该输出功能也使光标跟随移动 0AH DS:DX指向自定义的输入缓冲区首地址 从标准输入设备(通常为键盘)输入一串字符到用户定义的缓冲区,直到按下Enter键为止。在接受的同时显示到屏幕上,并且识别Ctrl-C键,也处理DOS编辑器

示例代码:

;输出hello world;data数据段定义data segment  string db 'hello world','$' ;切忌串结束符$data ends;代码段定义code segment;程序开始start:  mov ax,data  ;将数据段段地址装入AX寄存器  mov ds,ax ;将数据段段地址通过通用寄存器AX装入DS  mov dx,offset string ;将串的段内地址装入DX  mov ah,09h ;调用DOS的09H号功能,传入参数DS:DX=串地址,'$'结束字符串  int 21h  mov ah,4ch ;调用DOS的4CH号功能,带返回码结束,返回码存在于AL  int 21hcode ends  ;代码段定义结束end start  ;程序结束

运行结果如下:

2、字符串的输入

这里用到了上面DOS中断的0AH功能
可以将一段字符串读入并显示在屏幕上,代码如下

DATAS SEGMENT    buffer db 60;定义缓冲区长度           db ? ;预留实际输入字符个数的技术单元           db 60 dup(?);设DS已是buffer的段基址DATAS ENDSSTACKS SEGMENT    ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS    MOV DS,AX    mov ah,0ah;接受一串字符    lea dx,buffer    int 21h    ;此处输入代码段代码    MOV AH,4CH    INT 21HCODES ENDS    END START
原创粉丝点击