实验五 系统功能调用
1、程序说明:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
2、调试说明:在DEBUG显示字符窜时,曾显示乱码,未能按预期显示,经检查发现在编译字符窜时出现错误,因为调用21H中断输出一串字符要求用'$'结尾,我没用上‘$’。还有,键盘输入字符是被存放在AX内,当要多次使用AX时应该把输入内容另存一地址 3、源程序清单和执行结果:
源程序:
DATA SEGMENT DB ? DATA ENDS
STACK SEGMENT STACK DB 5 DUP(0) STACK ENDS CODE SEGMENT
ASSUME DS:DATA, SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX
MOV AH,01H ;从输入端读取字符 INT 21H
SUB AL,20H ;小写转换成大写 MOV DL,AL
MOV AH,02H ;输出字符到终端 INT 21H
MOV AH,4CH INT 21H CODE ENDS END START
运行结果:
实验六 分支程序设计
1、实验说明:假设有一组数据:5,-4,0,3,100,-51,请编一程序,判断:每个数大于0,等于0,还是小于0;并输出其判断结果。 即:
1 当x>0 y= 0 当x=0 -1 当x<0
2、调试说明:在最初的程序中,我使用了MOV BX,XX等语句,后来发现像这样的语句在实际使用中有些累赘,于是我便做了修改,简化了汇编语言。其次,在调试中,发现符号无法显示的问题,于是采用两次显示符号的方法,较理想的解决了负号问题。 3、程序框图: 开始
DS 段地址
SI 数据串偏址
CX 数据串长度
取数据并与 0 比较大小 小于
大于等于 等于 是否为0
显示1
YES INC SI 循环判断
NO
返回DOS
显示-1 显示0 4、源程序清单和执行结果:
源程序:
DATA SEGMENT
XX DB 05H,0FCH,00H,03H,64H,0CDH Y1 DB 'Y=1',0DH,0AH,'$' Y2 DB 'Y=0',0DH,0AH,'$' Y3 DB 'Y=-1',0DH,0AH,'$' DATA ENDS
STACK SEGMENT STACK DB 10 DUP(0) STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX LEA SI,XX MOV AX,0 MOV CX,6 L1: MOV AL,[SI]
CMP AL,0 ;与0比较 JG BIGER JE EQUAL
MOV DX,OFFSET Y3 MOV AH,09H INT 21H
JMP OUTPUT
BIGER: MOV DX,OFFSET Y1 MOV AH,09H INT 21H
JMP OUTPUT
EQUAL: MOV DX,OFFSET Y2 MOV AH,09H INT 21H
OUTPUT:INC SI LOOP L1 MOV AH,4CH INT 21H CODE ENDS
END START
运行结果:
思考题:
程序中的原始数据是以怎样的形式存放在数据区中的?请用DEBUG调试程序观察并分析。
以补码形式存放