二重循环

汇编实现二重循环有3种方法:

1.使用寄存器存储CX

;将data段中的每个单词改为大写字母
assume cs:code,ds:data
data segment
    db 'ibm             ';可看作4行1列的二维数组
    db 'dec             '
    db 'dos             '
    db 'vax             '
data ends
code segment
start:
    mov ax,data
    mov ds,ax
    mov cx,4
    mov bx,0
    s:
        mov dx,cx ;用寄存器存储cx
        mov si,0
       mov cx,3
    s1:
        mov al,[bx+si]
        and al,11011111b
        mov [bx+si],al
        inc si
        loop s1
    add bx,16
    mov cx,dx ;恢复外循环的cx
    loop s
    mov ax,4c00h
    int 21h

code ends
end start

2.使用内存单元存储CX

;将data段中的每个单词改为大写字母
assume cs:code,ds:data
data segment
    db 'ibm             ';可看作4行1列的二维数组
    db 'dec             '
    db 'dos             '
    db 'vax             '
    dw 0
data ends
code segment
start:
    mov ax,data
    mov ds,ax
    mov cx,4
    mov bx,0
    s:
        mov ds:[40h],cx
        mov si,0
       mov cx,3
    s1:
        mov al,[bx+si]
        and al,11011111b
        mov [bx+si],al
        inc si
        loop s1
    add bx,16
    mov cx,ds:[40h]
    loop s
    mov ax,4c00h
    int 21h

code ends
end start

3.使用栈段存储CX

;将data段中的每个单词改为大写字母
assume cs:code,ds:data
data segment
    db 'ibm             ';可看作4行1列的二维数组
    db 'dec             '
    db 'dos             '
    db 'vax             '
data ends

stack segment
    dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
    mov ax,data
    mov ds,ax
    mov cx,4
    mov bx,0
    s:
        push cx
        mov si,0
       mov cx,3
    s1:
        mov al,[bx+si]
        and al,11011111b
        mov [bx+si],al
        inc si
        loop s1
    add bx,16
    pop cx
    loop s
    mov ax,4c00h
    int 21h

code ends
end start
原文地址:https://www.cnblogs.com/luocodes/p/11939780.html