您的位置:首页 > 其它

比较分别在数据段与附加段中的字符串以及汇编中常见的四种中断指令

2014-12-12 01:06 363 查看
1.从键盘输入两个相同长度的字符串,分别放到数据段和附加段,利用串比较指令比较数据段和附加段中两个字符串,如果两串一样,输出Y,否则输出N。

这个程序调试了好久,之间遇到两个问题,其一是附加段的使用,需要对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寄存器中。

举例:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: