loop 循环和检测点 9.3
loop 指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对 IP 的修改范围都为:-128~127。
指令格式:loop 标号
操作:
- (cx)=(cx)-1
- 如果 (cx)≠0,(IP)=(IP)+8 位位移。
8 位位移=标号处的地址-loop指令后的第一个字节的地址
8 位位移的范围为-128~127,用补码表示
8 位位移由编译程序在编译时算出。
如果 (cx)=0,什么也不做(程序继续向下执行)。
使用 C 语言描述的话:
cx--;
if ((cx) !=0 ) jmp short 标号;
有此可见,如果 cx 是 5,其实 jmp 只有 4 次
检测点 9.3
补全编程,利用 loop 指令,实现在内存 2000H 段中查找第一个值为 0 的字节,找到后将它的偏移地址放到 dx 中
assume cs:code
code segment
start: mov ax, 2000h
mov ds, ax
mov bx, 0
s: mov cl, [bx]
mov ch, 0
___________
inc bx
loop s
ok: dec bx
mov dx, bx
mov ax, 4c00h
int 21h
code ends
end start
分析:
mov cl, [bx]
mov ch, 0
到这里,其实是将 [bx] 所指向的内存单元的一个字节的内容放置到 cx 寄存器中
然后要看 loop 指令执行的步骤 - 先要将 cx 减 1,然后判断 cx 中的值是否为 0,
如果不是 0 就继续循环,所以要想判断内存中的字节是否为零,需要补全的内容就是先让
cx 加1,故答案如下
assume cs:code
code segment
start: mov ax, 200h
mov ds, ax
mov bx, 0
s: mov cl, [bx]
mov ch, 0
inc cx
inc bx
loop s
ok: dec bx
mov dx, bx
mov ax, 4c00h
int 21h
code ends
end start
loop 循环和检测点 9.3的更多相关文章
- MySQL中的while、repeat、loop循环
循环一般在存储过程和存储函数中使用频繁,这里只给出最简单的示例 while delimiter $$ create procedure test_while() begin declare sum i ...
- oracle for loop循环以及游标循环
1. for in loop形式 DECLARE CURSOR c_sal IS SELECT employee_id, first_name || last_name ename, salar ...
- Oracle PL/SQL之LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- PL/SQL中LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- Oracle loop循环无法插入数据
以下的测试基于scott用户下的emp表 首先用while循环进行测试,向emp表插入999条数据 declare i emp.empno; begin loop insert into emp(em ...
- [转载]Oracle PL/SQL之LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- Oracle LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- MySQL学习笔记:repeat、loop循环
一.repeat循环 # ---- repeat ---- DELIMITER $$ CREATE PROCEDURE test_repeat() BEGIN ; REPEAT ; UNTIL a E ...
- 四、Oracle loop循环、while循环、for循环、if选择和case选择、更改读取数据、游标、触发器、存储过程
数据库的设计(DataBase Design): 针对于用户特定的需求,然后我们创建出来一个最使用而且性能高的数据库! 数据库设计的步骤: 01.需求分析 02.概念结构设计 03.逻辑结构设计 04 ...
随机推荐
- javascript算法
代码运行环境: nodejs + mochajs /* *选择排序 *每次查找数组最小数据 *将最小数据排到左侧 */ var assert = require('assert'); describe ...
- 发邮件 和 excel导出中文文件名
/** * 发邮件 * @param email * @param subject * @param body * @throws UnsupportedEncodingException */ pu ...
- jQuery:提交表单前判断表单是否被修改过
表单加载完成后执行 : //表单中包含input(text,checkbox,hidden),select,radio, $("#editWithdrawAutoApprovedConf ...
- CentOS 7 安装php开发环境
安装服务 : yum install httpd httpd-devel service httpd start 启动 安装mariadb : yum -y install mariadb* ...
- EBS 追前台最后一个执行的sql
首先 从前台获取sid 然后 获取sql地址 ; 最后 获取sql文本 select * from v$sqltext_with_newlines t where t.ADDRESS = '07000 ...
- div+css的第一个布局
---恢复内容开始--- 这个东西说难也不难,但也要详细思虑一番: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...
- SQL Server查询结果插入表
a) 插入新表 select * into newtable from table b) 插入已经存在的表 insert into table select * from table2 where.. ...
- 在svg中的line和path根据路径返回x,y
由于path有自带的api可获得总长度,和某个长度返回的坐标. var total = d.path.getTotalLength();//返回总长度 var point = d.path.getPo ...
- Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像
此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...
- c#中如何获取listbox中选中值的问题
StringBuilder ConponPerson = new StringBuilder(); for (int i = 0; i < lb_tzs.Items.Cou ...