[BX]和loop指令

下面是loop指令的简单总结。
详细的内容,可以参看王爽老师的《汇编语言》。
重要的东西不是loop指令如何使用,而是理解loop指令的内在实现,加深程序在计算机中运行的理解。


loop指令

先用loop的简单程序引入
题目:编程,用加法计算123*236,结果存在ax中。思考后看分析。
分析:将123累加236次。

assume cs:code

code segment    
    mov ax,0
    
    mov cx,236 
s:  add ax,123
    loop s
    
    mov ax,4c00h
    int 21h   
code ends

end

要点:

  • 在cx中存放循环次数。
  • s为标号,代表一个地址。
  • 循环的内容放在标号和loop之间。

[bx]

mov ax,[bx]
将段地址在ds中,偏移地址为bx中的内容。将该内存单元的内容放入ax中

题目:将ffff:0006单元中的数乘以3,结果存储在dx中。

assume cs:code
code segment
	mov ax,0ffffh
	mov ds,ax
	mov dl,[6]
	mov dh,0

	mov cx,2
s:  add dx,dx
	loop s

	mov ax,4c00h
	int 21h
code ends
end

注:在汇编语言中,数字不能以字母开头,所以前面加0

下面这个程序难度有点大,需要上机调试才能很清楚其中的过程。如果能彻底看懂这段代码,将是非常开心的事情。
题目:下面程序的功能是将”mov ax,4c00h“之前的指令,复制到内存0:200处,补全程序,。上级调试,跟踪运行结果。

assume cs:code

code segment
    
    mov ax,~~cs~~  
    mov ds,ax
    mov ax,0020h
    mov es,ax
    
    mov bx,0
    mov cx,~~17h~~ 
    
s:  mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s
    
    mov ax,4c00h
    int 21h
    
code ends

end

思考:是cs;ds行不行。17h是怎么得出来。
在这里插入图片描述

还有些题目,也挺有意思。
1、计算ffff:0~ffff:b单元数据的和。结果存放在bx中。
2、将内存ffff:0 ~ ffff:b单元的数据,复制到0:200~0:20b中。
3、编程,向内存0:200 ~ 0:23F依次传送数据0~63(3FH),程序中使用九条指令,9条指令包括”mov ax,4c00h“和”int 21h“

发布了104 篇原创文章 · 获赞 134 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/sinat_38816924/article/details/88886674