实验四---条件转移指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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、实验体会。

相关文档
最新文档