当前位置: 汇编教程 > 03-指令系统 > 阅读正文

汇编 循环指令

2021.7.12.   661 次   1004字

汇编中,执行循环语句,使用的是loop指令,语法

loop 标号

标号是一个特殊语法的符号,例如

start:

这里的start是一个标号,它由一个单词,加冒号组成

在每次执行loop中的内容时,会先执行cx = cx-1,即cx是内置的次数控制

循环指令实例

任务1:利用加法实现2^2,结果放在ax中

assume cs:code
code segment
    mov ax, 2
    mov ax, ax

    mov ax, 4c00h
    int 21h
code ends
end

任务2:利用加法实现2^3,结果放在ax中

assume cs:code
code segment
    mov ax, 2
    mov ax, ax
    mov ax, ax

    mov ax, 4c00h
    int 21h
code ends
end

任务3:利用加法实现2^12,结果放在ax中

由于重复太多,这里使用loop,cs控制循环次数,尽量不要在loop中改变cx的值,cx的值是多少就循环多少次

assume cs:code
code segment

start: mov ax,2
    mov cx, 11
s: add ax, ax
   loop s

   mov ax, 4c00h
   int 21h

code ends
end start

如果继续增加循环次数, 数据是否会超出ax存储范围?

汇编的显示功能

这里仅粗略介绍显示功能,并不详细介绍中断

与程序的退出代码相似

lea dx, ds:[0]   ; 相当于 mov dx, 0
mov ah, 09h
int 21h

在这里,实际起作用的是后2句,mov ah, 09h,也可以写成mov ax, 0900h等

09号功能会将dx的地址所指向的数据显示出来(显示字符串),前一句lea是将ds的0偏移地址给dx( 其实这里可以直接用 mov dx, 0)

除了起始地址,在显示时,需要一个终止符号,否则可能显示一些无用的乱码,终止符号为:$, 它的16进制为24h

在显示时,以字节为单位,且原封不动翻译ASCII字符集

显示2^3的数据在屏幕

code segment
    assume cs:code
start: 
    mov ax,2
    mov cx, 2         ; 结果不要大于9
    s: 
        add ax, ax
        loop s
    add ax,30h        ; 把数字转化为ASCII对应的编码
    mov ds:[0], ax
    mov ax, 24h
    mov ds:[1], ax    ; 终止符号

    lea dx, ds:[0]

    mov ah, 09h
    int 21h
   
    mov ax, 4c00h
    int 21h

code ends
end start

上述代码仅能显示一个字节,那么超过10呢?是否应该要多个字节显示?如何显示?

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群