比较分别在数据段与附加段中的字符串以及汇编中常见的四种中断指令
2014-12-12 01:06
363 查看
1.从键盘输入两个相同长度的字符串,分别放到数据段和附加段,利用串比较指令比较数据段和附加段中两个字符串,如果两串一样,输出Y,否则输出N。
这个程序调试了好久,之间遇到两个问题,其一是附加段的使用,需要对DS压栈对ES调整处理,即
View Code
截图:
2.下面顺便提一下常见的四种中断:
1)键盘输入字符中断
Mov ah,1
Int 21h;结果是 al←输入字符的ASCII码
2)屏幕显示一个字符中断
Mov ah,2
Mov dl,要显示字符的ASCII码
Int 21h;(注意:这里al会变为要输出的字符的ASCII码)
3)屏幕显示字符串(9号功能调用)
格式: MOV DX, 字符串的偏移地址
MOV AH, 09H
INT
21H
在使用9号功能调用时,应当注意以下问题:
① 待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。
② 应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。
4)键盘输入字符串(0AH号功能调用)
格式: MOV DX, 已定义缓冲区的偏移地址
MOV AH, 0AH
INT 21H
①
执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,该个数包括回车符0DH在内。第二个字节保留,在执行程序完毕后存入输入的实际字符个数(不含回车)。从第三个字节开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,一直到输入回车键为止。
②
应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。
举例:
这个程序调试了好久,之间遇到两个问题,其一是附加段的使用,需要对DS压栈对ES调整处理,即
DATA SEGMENT VA DB 50,0,50 DUP(0),'$' V1 DB 'Y' V2 DB 'N' ENTER DB 0AH, 0DH, '$' DATA ENDS DATA2 SEGMENT VB DB 50,0,50 DUP(0),'$' DATA2 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA2 START: MOV AX,DATA ;装入DS MOV DS,AX MOV AX,DATA2 ;装入ES MOV ES,AX MOV DX,OFFSET VA ;输入字符串VA MOV AH,0AH INT 21H PUSH DX ;回车换行 MOV DX, OFFSET ENTER MOV AH, 09H INT 21H POP DX PUSH DS MOV AX,ES ;对附加段的处理 MOV DS,AX MOV DX,OFFSET VB ;输入字符串VB MOV AH,0AH INT 21H POP DS PUSH DX ;回车换行 MOV DX, OFFSET ENTER MOV AH, 09H INT 21H POP DX LEA SI,VA ;把源串地址传给SI ; PUSH DS ; MOV AX,ES ; MOV DS,AX LEA DI,VB ;把目的串地址传给DI ; POP DS CLD ;清除方向标志,使向前 MOV CX,50 ;重复计数器 REPE CMPSB ;相等则重复,CX为0或者遇到不相等则顺序执行 JE J1 ;相等则跳转 MOV AH,2 MOV DL,V2 INT 21H JMP J2 J1: MOV AH,2 MOV DL,V1 INT 21H J2: MOV AH,4CH INT 21H CODE ENDS END START
View Code
截图:
2.下面顺便提一下常见的四种中断:
1)键盘输入字符中断
Mov ah,1
Int 21h;结果是 al←输入字符的ASCII码
2)屏幕显示一个字符中断
Mov ah,2
Mov dl,要显示字符的ASCII码
Int 21h;(注意:这里al会变为要输出的字符的ASCII码)
3)屏幕显示字符串(9号功能调用)
格式: MOV DX, 字符串的偏移地址
MOV AH, 09H
INT
21H
在使用9号功能调用时,应当注意以下问题:
① 待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。
② 应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。
4)键盘输入字符串(0AH号功能调用)
格式: MOV DX, 已定义缓冲区的偏移地址
MOV AH, 0AH
INT 21H
①
执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,该个数包括回车符0DH在内。第二个字节保留,在执行程序完毕后存入输入的实际字符个数(不含回车)。从第三个字节开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,一直到输入回车键为止。
②
应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。
举例:
相关文章推荐
- 读王爽老师汇编语言笔记---int指令、端口、外中断以及键盘的输入
- 常见寄存器以及常见汇编指令,常见爆破指令 good
- 汇编常见指令理解
- 汇编->字符串比较
- C++ 字符串比较 汇编代码实现
- 【原译】四种方法统计字符串的行数&执行时间比较
- 汇编中的字符串操作指令
- LoadRunner字符串比较的常见错误
- SessionState 的三种模式比较以及常见错误
- 用汇编语言写一个程序,比较两个字符串是否相同。
- 系统接口规范以及常见的接口技术概述和比较
- 解析:四种常见的网络存储技术的比较
- 实训汇编语言设计——比较两个字符串
- java中四种操作xml方式的比较以及四种方法的简单例子
- WindowsBatch与LinuxShell比较[batch常见命令和字符串查找命令find/findstr]
- oracle中字符串连接以及在函数中常见问题的解决方法
- 汇编常见伪指令
- LoadRunner字符串比较的常见错误
- == 和 equal 的比较以及有关字符串创建的一些心得
- 【原】检测是否包含特定字符串的几种方法以及性能比较