汇编_双重循环
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编_双重循环相关的知识,希望对你有一定的参考价值。
寄存器实现:
采用cx寄存器实现双重循环,但是需要注意由于两次循环都需要用到cx寄存器,但是cx寄存器又不能共享,所以引入了一个dx寄存器来暂存第一层循环的cx。实现将四个字符串的前三个字符转换为大写字符。
assume cs:codesg,ds:data
data segment
db "abc..."
db "def..."
db "ghi..."
db "jkl..."
data ends
codesg segment
start: mov ax, data
mov ds, ax
mov cx, 3;外循环三次
mov si, 0;表示处理第几列
s: mov dx, cx;保存外层循环的值
mov bx, 0
mov cx, 4;内循环四次
s0:
mov al, ds:[bx+si]
and al, 0DFh;转换为大写字母
mov ds:[bx+si], al
add bx, 6
loop s0
inc si
mov cx, dx
loop s
mov ax, 4c00h
int 21
codesg ends
end start
实验结果:
堆栈实现
采用栈来暂存cx的值,这样就确保了可以进行多层循环,而不用受寄存器数量的限制。
assume cs:codesg,ds:data,ss:stack
data segment
db "abc..."
db "def..."
db "ghi..."
db "jkl..."
data ends
stack segment
dw 0,0,0,0;定义栈的大小为4
stack ends
codesg segment
start: mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 8;定义栈顶指针
mov cx, 3;外循环三次
mov si, 0;表示处理第几列
s: push cx;保存外层循环的值
mov bx, 0
mov cx, 4;内循环四次
s0:
mov al, ds:[bx+si]
and al, 0DFh;转换为大写字母
mov ds:[bx+si], al
add bx, 6
loop s0
inc si
pop cx
loop s
mov ax, 4c00h
int 21
codesg ends
end start
实验结果:
以上是关于汇编_双重循环的主要内容,如果未能解决你的问题,请参考以下文章