社区
汇编语言
帖子详情
关于REP和LOOP执行过程的问题
xiaomiaowu
2007-10-08 12:06:53
REP类指令和LOOP指令
是先CX-1还是先判断CX=0否
...全文
404
3
打赏
收藏
关于REP和LOOP执行过程的问题
REP类指令和LOOP指令 是先CX-1还是先判断CX=0否
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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楼完全正确。
微机实验报告.doc
实验一 汇编语言上机操作训练——比较字符串 一、实验目的 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 L
oop
1: 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并加一,同时
rep movsb
可以看出movsb的功能是将di:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器df位的值,将si和di递增或递减。movsw的功能是将di:si指向的内存字单元中的姿送入es:di中,然后根据标志寄存器df位的值,将si和di递减2或递增2。功能:
执行
movsb指令相当于进行下面几步操作。2. 如果df=0则: (si)=(si)+1。3. 如果df=1则: (si)=(si)-1。rep movsb或rep movsw。串发送指令格式:movsb。
汇编_指令_REP MOVESB 和 CLD
先说说MOVSB(MOVe String Byte):即字符串传送指令,这条指令按字节传送数据。通过SI和DI这两个寄存器控制字符串的源地址和目标地址,比如DS:SI这段地址的N个字节复制到ES:DI指向的地址,复制后DS:SI的内容保持不变。而REP(REPeat)指令就是“重复”的意思,术语叫做“重复前缀指令”,因为既然是传递字符串,则不可能一个字(节)一个字(节)地传送,所以需要有一个寄存器...
MySQL存储
过程
L
OOP
循环嵌套的使用说明
本篇代码都是自己编写运行通过的。 实现类似代码中 for(;;){}功能 这种结构会无限循环,所以需要结束标识leave来终止循环。 l
oop
_1是随便写的,标识一下就可以,用来在leave生效时,确定中断那个l
oop
DELIMITER // create procedure l
oop
_test1() begin declare i int default 0; l
oop
_1: l...
rep repe repz repnz scasb scasw学习
重复前缀 REP/REPE/REPNE/REPZ/REPNZ rep movsb 用汇编语法来描述就是: s: movsb l
oop
s 这样REP/REPE/REPNE/REPZ/REPNZ后的指令,先
执行
一下,再查条件!类似于 .repeat 指令 [.break [.if 退出条件]] [.continue] .unt
汇编语言
21,459
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章