汇编实验五条件转移指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编实验五条件转移指令
————————————————————————————————作者:————————————————————————————————日期:
1
实 验 报 告
── 学年 第 学期
实 验 课 程 汇编语言 学 生 姓 名 123 实 验 项 目 条件转移指令 学 院 计算机科学技术
实 验 性 质 专业选修课
班 级 学 号
实 验 地 点
同 组 人 数 1
第 组
实 验 日 期 第周 星期 第 节
成 绩
5
环 境 参 数
Dosbox-0.74 Masm 5.0
一、实验目的及要求
二、实验原理、实验内容 三、实验仪器设备及材料 四、操作方法与实验步骤 五、实验数据记录及处理 六、实验结果分析及讨论
一、实验目的:
1.8088指令:JZ,JNZ,JC,JNC,CMP,SHR 。 2.程序:用字符搜索法确定字符串长度。 3.程序:16进制数化为ASCII 码的一般方法。
二:实验任务
1.自编程序:修改实验准备程序(二),使除了以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII 字符,07-0D 的控制字符用'.'代替。
源代码:
DATA SEGMENT
DATA ENDS
STACKS SEGMENT STACK
STACKS ENDS
CODE SEGMENT 'code'
ASSUME CS:CODE,DS:DATA,SS:STACKS
START:
MOV AX,DATA
MOV DS,AX
MOV SI,0H
MOV BL,10H
LOP:MOV DL,[SI] ;先处理高四位
MOV CL,4H
SHR DL,CL ;右移四位
CMP DL,0AH ;判断是‘0’-‘9’还是‘a'-’f‘
JC J1 ;是0-9 跳转
ADD DL,7H ;是a-f 要多加7 因为‘9’为 390h ‘A' 为41h 相差7h
J1: ADD DL,30H ;以'0'为基址
MOV AH,2H ;输出高四位的ASCII码
INT 21H
MOV DL,[SI] ;处理第四位
AND DL,0FH
CMP DL,0AH ;同上
JC J2
ADD DL,7H
J2: ADD DL,30H
MOV AH,2H
INT 21H ;数值输出完毕
MOV DL,20H ;输出一个空格
MOV AH,2H
INT 21H
MOV DL,[SI] ;将数值直接作为ASCII输出
MOV DH,06H ;判断是否在07-0d之内
CMP DH,[SI]
JNC J3
MOV DH,0eH
CMP [SI], DH
JNC J3
MOV DL,2EH ;在范围内,换成’.'
J3: MOV AH,2H ;输出
INT 21H
MOV DL,20H ;第一个字节处理完毕,输出一个空格 MOV AH,2H
INT 21H
INC SI ;内存中下一个字节
DEC BL ;控制循环次数
JNZ LOP
;回调结束代码
MOV ax,4C00H
INT 21H
CODE ENDS
END START
编译连接:
MS-DOS下运行结果:
结论:
1、可以看到输出了十六进制的字符并在其右
边输出了对应的ASCII字符。
2、因为是在dos下执行了,数据段地址与
debug下不同,所以输出的数据不同,但通
过查ASCII表,确定其对应字符正确。
2. BUFX、BUFY和BUFZ9是3个有符号的十六进制数,编写一个比较相等关系的程序:
1)如果这3个数都不相等,则显示0
2)如果这3个数中有两个数相等,则显示1
3)如果这3个数都相等,则显示2
源代码:
DATA SEGMENT
DATA ENDS
STACKS SEGMENT STACK
STACKS ENDS
CODE SEGMENT 'code'
ASSUME CS:CODE,DS:DATA,SS:STACKS START:
MOV AX,DATA
MOV DS,AX
;将三个数分别存到bh,bl,dh中
mov ah, 01h
int 21h
mov bh, al
mov dl,20h
mov ah,02h
int 21h
mov ah, 01h
int 21h
mov bl, al
mov dl,20h
mov ah,02h
int 21h
mov ah, 01h
int 21h
mov dh, al
mov dl,0ah
mov ah,02h
int 21h
;将dl设为字符‘0’
mov dl, 30h
cmp bh,bl
jnz next1 ;不相等
inc dl ;有两个数相等加一
next1: cmp bh,dh
jnz next2 ;不相等
inc dl
next2: cmp bl,dh
jnz next3 ;不相等
inc dl ;这两个数相等加一
next3: cmp dl,33h ;超过二的话,需要重新修改 jb next4
mov dl,32h ;改为‘2’
next4: mov ah,02h ;输出
int 21h