微机原理实验之_分支程序、循环程序设计
- 格式:doc
- 大小:117.00 KB
- 文档页数:5
实验四循环分支程序设计一&实验目的1、熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
2、掌握循环及分支程序的设计方法;3、学会针对不同的问题,选用不同的循环分支结构设计方法;二&实验环境微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。
三&实验要求1、使用正确的指令格式和程序结构编写实验内容要求的所有程序;2、对编写或改写的程序进行汇编连接时,注意对错误信息的处理;3、熟悉源程序汇编、连接的使用方法。
四&实验内容1、使用程序1掌握汇编语言程序上机过程,2、阅读程序2,理解程序功能并上机运行,使用debug检验结果。
3、编写一个程序,判别键盘上输入的字符;若是1-9字符或A-Z ,则显示之;若为a-z字符,均显示“A-Z”;若是<ESC>(其ASCII码为1BH),则结束程序。
4、改写任务三中的程序:输入小写字母a时,显示内容为aA*输入小写字母a时,显示内容为a***输入小写字母a时,显示内容为aa***五&实验步骤1、用EDIT编辑软件,编写.ASM源程序。
2、对其进行汇编及连接,产生.EXE文件。
3、在DOS下运行.EXE文件进行。
4、实验程序清单1)程序1:stack segmentdw 512 dup(?)stack endsdata segmentstring db 'Hello, Everybody !','$'data endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hcode endsend start2)程序2data segmentx db 20hy dw ?data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xmov bl,10xor ah,ahshl ax,1mov bx,axmov cl,2shl ax,cladd ax,bxmov y,axmov ax,4c00hint 21hcode endsend start3)程序3:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bnd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start4)改写程序1:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bmov ah,2int 21hmov al,'*'nd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start5)改写程序2:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndmov al,'*'mov cx,2ok: mov dl,almov ah,2int 21hloop oknd: mov dl,almov ah,2int 21hjmp againint 21hcode endsend start6)改写程序3:data segmentmessage db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndmov dl,almov ah,2int 21hmov al,'*'mov cx,2ok: mov dl,almov ah,2int 21hloop oknd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start六&思考题:编写一个程序,显示AL寄存器中的两位十六进制数。
实验四分支和循环程序设计实验一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令 JMP无条件转移指令 JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令 JXX条件转移指令可分为三大类:1).简单条件转移指令指令。
根据单个标志位的状态判断转移条件。
标志位指令转移条件意义CFJC CF=1 有进位/借位JNC CF=0 无进位/借位ZFJE/JZ ZF=1 相等/等于 0JNE/JNZ ZF=0 不相等/不等于 0SFJS SF=1 是负数JNS SF=0 是正数OFJO OF=1 有溢出JNO OF=0 无溢出PFJP/JPE PF=1 有偶数个 1JNP/JPO PF=0 有奇数个 12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是 A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<BJBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
指令转移条件意义JG/JNLE SF=OF AND ZF=0 A>BJGE/JNL SF=OF OR ZF=1 A>=BJL/JNGE SF OF AND ZF=0 A<BJLE/JNG SF OF OR ZF=1 A<=B四、实验内容与步骤1、判断方程 AX2+BX+C=0是否有实根。
微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
《微机原理与接口技术》实验报告题目:循环程序设计一、实验目的1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法二、实验任务1. 从屏幕上输入一个三位数的十进制数,把十进制的值存放在AX寄存器中2. 把内存单元ARRAY 中存放的数值,显示在屏幕上(即完成二进制与十进制直接的转换)3. 计算1+2+……n=?,其中n通过键盘输入。
三、实验过程data segmentstring1 db "Please input a number(1~350):$" string2 db "The sum is:$"buf db 10db 3db 10 dup(0)data endsstack segmentdb 10 dup(0)stack endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,string1mov ah,9int 21hlea dx,bufmov ah,0ahint 21hlea si,bufmov ax,0mov dl,10lea si,buf+2 mov cl,buf+1 mov ch,0a1: mul dlsub [si],30h add al,[si]adc ah,0 inc siloop a1mov cx,ax xor ax,axmov bx,1a2: add ax,bx inc bxloop a2mov cx,axmov dl,10mov ah,2int 21hmov dl,13mov ah,2int 21hlea dx,string2mov ah,9int 21hmov ax,cxmov cx,4 a3: cwdmov bx,10div bxpush dxloop a3mov cx,4a4: pop dxadd dx,30hmov ah,2int 21hloop a4code endsend start。
实验名称分支与循环程序设计实验指导教师罗志祥专业班级光电1406姓名段昳晖学号U2014*****联系电话137********一、任务要求1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。
264X当XYX/2当10X64X当X102.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。
二、设计思路1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。
264X当XYX当X/21064X当X10将外部单元1000H中的X,通过分支判断,分别执行不同的语句,三条语句分别为标记为L1、L2、L3,先比较X与64的大小关系,再判断X与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE指令后的进位位CY,进一步比较大小,分别跳转至对应语句。
将结果存于外部单元的1001H以及1002H。
1专业资料整理2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。
主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。
利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60 秒,外循环循环1次,外循环循环24次,清零。
其中对端口显示的秒数、分钟数、时间数,进行二进制修正。
利用循环来设计延时程序,合理计算语句长度,以及循环次数。
程序运行时修正P3.0的值,可以实现暂停计数和继续的功能。
微机原理实验之 - 分支程序、循环程序设计实验三分支程序、循环程序设计实验一、实验目的1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
3.加深对循环结构的理解。
4.掌握循环结构程序设计的方法以及调试方法。
二、实验设备PC机一台,TD-PITE实验装置一套。
三、实验内容:设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1所示。
图3-1 源数据块与目的数据块在存储中的位置情况对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:如图3-2所示。
图3-2 程序流程图实验程序STACK SEGMENT STACK DW 64 DUP(?) STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010H MOV SI, 3100HMOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI MOV AL, [SI] MOV [DI], AL DEC SIA1:DEC DI DEC CX JNE A1 JMP A3MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 JMP A3 ENDS END STARTA2:A3: CODE实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统;2. 用E命令在以SI为起始地址的单元中填入16个数;3. 运行程序,然后再停止运行;4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
实验四分支和循环程序设计实验一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令 JMP无条件转移指令 JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令 JXX条件转移指令可分为三大类:1).简单条件转移指令指令。
根据单个标志位的状态判断转移条件。
标志位指令转移条件意义CFJC CF=1 有进位/借位JNC CF=0 无进位/借位ZFJE/JZ ZF=1 相等/等于 0JNE/JNZ ZF=0 不相等/不等于 0SFJS SF=1 是负数JNS SF=0 是正数OFJO OF=1 有溢出JNO OF=0 无溢出PFJP/JPE PF=1 有偶数个 1JNP/JPO PF=0 有奇数个 12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是 A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<BJBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
指令转移条件意义JG/JNLE SF=OF AND ZF=0 A>BJGE/JNL SF=OF OR ZF=1 A>=BJL/JNGE SF OF AND ZF=0 A<BJLE/JNG SF OF OR ZF=1 A<=B四、实验内容与步骤1、判断方程 AX2+BX+C=0是否有实根。
汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。
2、熟悉DEBUG程序的使用方法。
3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。
二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。
2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。
三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。
2、预习DEBUG调试程序的使用方法。
3、根据实验内容要求,编写好实验源程序。
四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。
2、汇编、连接源程序,产生.EXE可执行文件。
3、运行程序。
(1) 进入DEBUG。
打入DEBUGT MYPROG.EXE。
MYPROG为所编程序的文件名。
(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。
如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。
(3) 检查程序。
在程序中设置若干断点,以便杳出错误所在。
(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。
五、实验报告要求1、列出程序清单,并给出程序流程图。
2、总结实现数据传送的几种方法,指出它们的区别。
开始3、分析实验中所遇到的一些问题,分析错误原因。
4、说明本实验中是如何使用DEBUG进行调试的。
CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。
实验三分支程序、循环程序设计实验一、实验目的1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
3.加深对循环结构的理解。
4.掌握循环结构程序设计的方法以及调试方法。
二、实验设备PC机一台,TD-PITE实验装置一套。
三、实验内容:设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1所示。
图3-1 源数据块与目的数据块在存储中的位置情况对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:如图3-2所示。
图3-2 程序流程图实验程序STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010HMOV SI, 3100HMOV DI, 3200HCMP SI, DIJA A2ADD SI, CXADD DI, CXDEC SIDEC DIA1: MOV AL, [SI]MOV [DI], ALDEC SIDEC DIDEC CXJNE A1JMP A3A2: MOV AL, [SI]MOV [DI], ALINC SIINC DIDEC CXJNE A2A3: JMP A3CODE ENDSEND START实验步骤1. 按流程图编写实验程序,经编译、链接无误后装入系统;2. 用E命令在以SI为起始地址的单元中填入16个数;3. 运行程序,然后再停止运行;4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
实验三分支程序、循环程序设计实验
一、实验目的
1.掌握分支程序的结构。
2.掌握分支程序的设计、调试方法。
3.加深对循环结构的理解。
4.掌握循环结构程序设计的方法以及调试方法。
二、实验设备
PC机一台,TD-PITE实验装置一套。
三、实验内容:
设计一数据块间的搬移程序。
设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图1所示。
图3-1 源数据块与目的数据块在存储中的位置情况
对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:
当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:如图3-2所示。
图3-2 程序流程图实验程序
STACK SEGMENT STACK
DW 64 DUP()
STACK ENDS
CODE S EGMENT
ASSUME CS:CODE
START: MOV CX, 0010H
MOV SI, 3100H
MOV DI, 3200H
CMP SI, DI
JA A2
ADD SI, CX
ADD DI, CX
DEC SI
DEC DI
A1: MOV AL, [SI]
MOV [DI], AL
DEC SI
DEC DI
DEC CX
JNE A1
JMP A3
A2: MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
DEC CX
JNE A2
A3: JMP A3
CODE E NDS
END START
实验步骤
1. 按流程图编写实验程序,经编译、链接无误后装入系统;
2. 用E命令在以SI为起始地址的单元中填入16个数;
3. 运行程序,然后再停止运行;
4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同;
5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
2. 计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。
编写实验程序,计算上式的结果,参考流程图如图3-3所示。
图3-3 程序流程图
实验程序
STACK SEGMENT STACK
DW 64 DUP()
STACK ENDS
CODE S EGMENT
ASSUME CS:CODE
START: MOV DX,0001H
MOV BL,02H
A1: MOV AL,BL
INC BL
MUL BL
ADD DX,AX ;结果存于DX中
CMP AX,00C8H ;判断N(N+1)与200的大小
JNA A1
A2: JMP A2
CODE E NDS
END START
实验步骤
(1)编写实验程序,编译、链接无误后装入系统;
(2)运行程序,然后再停止程序运行;
(3)运算结果存储在寄存器DX中,查看结果是否正确;
(4)可以改变N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于FFFFH 将产生数据溢出。
2. 求某数据区内负数的个数
设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。
实验程序流程图如图3-4所示。
图3-4 程序流程图
实验程序
STACK SEGMENT STACK
DW 64 DUP()
STACK ENDS
CODE S EGMENT
ASSUME CS:CODE
START: MOV DI, 3000H ;数据区首地址
MOV CL, [DI] ;取数据个数
XOR CH, CH
MOV BL, CH
INC DI ;指向第一个数据
A1: MOV AL, [DI]
TEST AL, 80H ;检查数据首位是否为1
JE A2
INC BL ;负数个数加1
A2: INC DI
LOOP A1
MOV [DI], BL ;保存结果
A3: JMP A3
CODE E NDS
END START
实验步骤
(1)按实验流程编写实验程序;
(2)编译、链接无误后装入系统;
(3)键入E3000,输入数据如下:
3000=06 (数据个数)
3001=12
3002=88
3003=82
3004=90
3005=22
3006=33
(4)先运行程序,然后停止程序运行;
(5)查看3007内存单元或寄存器BL中的内容,结果应为03;(6)可以进行反复测试来验证程序的正确性。