汇编中,执行循环语句,使用的是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呢?是否应该要多个字节显示?如何显示?
