实验四---条件转移指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四条件转移指令
实验目的:
通过实验掌握下列知识:
1、8086指令:JZ,JNZ,JC,JNC,CMP,SHR。
2、程序:用字符搜索法确定字符串长度。
3、程序:16进制数化为ASCII码的一般方法。
实验容及步骤:
一、用字符搜索法确定字符串长度:
1、用A命令在100H开始的存处键入下列程序:
JMP START ;无条件调至Start
偏移地址为102 DB 'This is the program to measure' ;定义一个字符串长度为30 DB 'the length of a string!$' ;定义字符串,长度为23 不算字符串结束符$
START: MOV BX,102 ;容为102赋给bx
MOV AL,24 ;24赋给al
XOR CL,CL ;cl清零
LOP: CMP AL,[BX] ;地址[0102]的容和24表示的字符$比较大小
JZ EXIT ;遇到$,调至exit,程序结束
INC BX ;bx自增1
INC CL ;cl自增1
JMP LOP ;无条件转移至lop
EXIT: INT 3
2、用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?
二、16进制数化ASCII码的一般方法(显示存容)
1、用A命令在100H处键入下列程序:
MOV SI,0 ;将容为0的十六进制数赋给si
MOV BL,10 ;将容为10的十六进制数赋给bl
LOP: MOV DL,[SI] ;将地址为[0]单元的容赋给dl
MOV CL,4 ;将4赋给cl
SHR DL,CL ;dl的容逻辑右移4次,最低位进入cf
CMP DL,0A ;dl的容和0a比较大小
JC J1 ;判断有无进位,有了转向j1
ADD DL,7 ;无进位,将7和dl的容相加
J1: ADD DL,30 ;将30和dl的容相加
MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容
MOV DL,[SI] ;将[0]的容赋给dl
AND DL,0F ;dl的容和0f相加
CMP DL,0A ;dl的容和0a比较大小
JC J2 ;判断有无进位,有了转向j2
ADD DL,7 ;无进位,将dl的容和7相加放入dl中
J2: ADD DL,30 ;有进位,将dl的容和30相加放入dl中
MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容
MOV DL,20 ;将20赋给dl 输入一个空格字符
MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容
INC SI ;si自增1
DEC BL ;dl自减1
JNZ LOP ;判断结果,若为0调至lop
INT 20 ;中断程序
将十六进制数AB A先显示再让B显示再有空格的显示所以执行后执行前结果一样了
0-9 A-F十六进制数转换为ASCII码31-39 41-46
2、用N,W命令将此程序用文件名存入磁盘。
3、用Q命令退出DEBUG。
4、在DOS命令状态下直接运行命令文件,应在屏幕上显示出存从0000H开始的16个字节的容,若有错误,用DEBUG检查之。
5、自编程序:修改上面程序,使除以16进制数形式显示存容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用'.'代替。
没有加 MOV DL,20 ;将20赋给dl 输入一个空格字符MOV AH,2 ;设置功能号:2赋给ah
INT 21 ;dos功能调用:显示dl寄存器的容这段代码的显示
三、综合程序(选做):测量一字符串长度,并用16进制数显示之
程序:
JMP START ;无条件跳转至Start
DB 'This is a program to measure the length of a string。' ;定义一字符串
DB 0D,0A ;0D代表回车 0A代表换行
DB 'the length of the string is: $' ;定义一字符串以 $ 结束START: MOV AH,9 ;显示字符串
MOV DX, 102 ;102赋给dx
INT 21 ;dos功能调用:显示dl寄存器的容
MOV BX, 101 ;101赋给bx
MOV AL,'$' ;将$ 赋给al
MOV DH,FF ;ff赋给dh
LOP: INC BX ;bx自增1
INC DH ;dh自增1
CMP AL,[BX] ;第一个字符串和$比较大小
JNZ LOP ;如果不相等,调至lop
以上语句是测字符串的长度
以下语句是以十六进制数显示
MOV CH,2 ;2赋给ch
MOV CL,4 ;4赋给cl
LOP1: ROL DH,CL ; dh循环左移4为
MOV DL,DH ;dh的容赋给dl
AND DL,0F ;dl的容和0f相与
ADD DL,30 ;dl的容加30 下面语句是把十六进制数转化为ASCII码
CMP DL,3A ;dl的容和3a比较大小
JC J ;dl小于3a的话调至j
ADD DL,7 ;dl的容加7
J: MOV AH,2 ;显示一个字符
INT 21 ;dos功能调用
DEC CH ;ch自减1
JNZ LOP1 ;ch若不为0调至lop1
INT 20 ;程序中止
键入此程序,存入???.COM文件中并在DOS命令状态下直接运行之,若未出现预期结果,用DEBUG检查有否错误?
实验报告要求:
1、自编程序草稿及调试后的正确程序。
2、实验体会。