关于REP和LOOP执行过程的问题

xiaomiaowu 2007-10-08 12:06:53
REP类指令和LOOP指令
是先CX-1还是先判断CX=0否
...全文
404 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jrjj 2007-10-08
  • 打赏
  • 举报
回复
rep 先判断CX再-1
loop 先-1再判断CX
hkbyest 2007-10-08
  • 打赏
  • 举报
回复
if (cx!=0)cx--;loop;
hkbyest 2007-10-08
  • 打赏
  • 举报
回复
2楼完全正确。
实验一 汇编语言上机操作训练——比较字符串 一、实验目的 1、学习程序设计的基本方法和技能; 2、熟练掌握汇编语言设计、编写、调试和运行; 二、实验内容和要求 1、汇编语言程序上机操作方法 编写一程序,比较两个字符串STRING1和STRING2所含字符是否相同,若相同刚在屏幕上 显示'MATCH',否则,显示'NOT MATCH'。 三、实验主要仪器设备和材料 计算机一台 四、程序 略 五、调试过程: 1、执行程序 表示两字符串相同 2、u命令反汇编: 3、在程序执行以前的寄存器情况: 内存情况: 4、用E命令修改数据区字符串及修改前后内存数据区的对比: 5、用G命令查看修改后的情况: 修改后的字符串不相同了。 六、程序功能与调试过程中遇到的问题 1、分析程序功能 程序的功能是比较string1与string2所含字符是否相同,若相同则在屏幕上显示'MA TCH',否则,显示'NOT MATCH'。 因为string1为'Move the cursor backward',string2为' Move the cursor backward'。所以string1与string2相同,显示'MATCH'。后面用重新修改了下这些字符 ,会显示"not Match" 2、调试程序过程中遇到的问题 对汇编认识停留在上课老师的文字表达,至于实际操作,可以说完全不懂,只能在实 验室里对着实验书一步步做下去,没遇到什么问题。但是回到宿舍中,连在哪输入都不 知道,可想而知对汇编的认知度。好在在同学们的帮助下,还是能够顺利的完成了实验 。只是做的时候对有些过程与指令不太明白,经过查阅相关资料后之后,也弄明白了个 大概,希望在以后的微机课程学习中多用心。 七、思考题 1、将内存DATA1单元开始的0~15共16个数传送到DATA2单元开始的数据区中。 MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,16 CLD REP MOVSB 2、将程序中的指令JZ MATCH改为JNZ MATCH,程序结果如何?为什么? JZ为零标志为1转移,而JNZ为零标志为0转移。所以当为JNZ MATCH后,当两字符串比较时,输出为'NO MATCH',不相同时为'MATCH'。因此,程序结果为'NO MATCH'。 实验二 分支、循环、及子程序设计 1. 实验目的 1. 学习循环程序的基本结构和设计方法; 2. 熟练掌握程序的调试方法; 2. 实验内容和要求 本程序采用两重循环来实现,内层对应学生的名次计算,外层解决所有学生的名次;以 GRADE为首地址的10个字保存学生的成绩,RANK为地址的10个字填入学生的名次。本程序 对应的寄存器分配情况说明如下: AX:存放当前被测学生的成绩; BX:存放当前被测学生的相对地址指针; CX:内循环计数值; DX:当前被测学生的名次计算值; SI:内循环测试时的地址指针; DI:外循环计数值; 3. 实验主要仪器设备和材料: 计算机一台; 4. 实验方法、步骤及结构测试 1程序略 2程序框图如下: 3程序执行 在调试模式下,利用反汇编指令(U)得到的程序代码段如下截图所示: 五 实验报告要求 1 程序框图上图即是,双重循环结构外循环包含内循环,当外循环结构每执行一次循环时 ,内循环结构在一般情况下要从循环的开始到循环的正常结束从头到尾执行一遍。 2改变程序的结果为10进制 通过修改程序代码,实现了将程序结果改为10进制形式。程序代码及运行结果截图如下 (修改或增加部分用下划线标识): Data SEGMENT Grade dw 88H,75H,95H,63H,98H,78H,87H,73H,90H,60H ;实际上,若将两个十六进制数(各位数字仅限于(0~9))直接看成十进制数用以相比 较,则大者恒大。 ;所以可以在定义数据段就直接将分数(十进制数)当十六进制数输入,虽然缩小了可以 支持的数字大小 ;范围,但不影响程序功能。通过这样可以实现输出结 果更加直观。 Rank dw 10 dup(?) Data ENDS Program segment Main proc far Assume cs:program,ds:data Start: Push ds Sub ax,ax Push ax Mov ax,data Mov ds,ax Mov di,10 Mov bx,0 Loop1: Mov ax,grade[bx] Mov dx,0 Mov cx,10 Lea si,grade Next: Cmp ax,[si] Jg no_count Push ax ;将ax的内容压入堆栈进行保护 Mov ax,dx ;将dx的内容传给ax并加一,同时

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧