簡介 :
利用嵌套循環(huán)將數(shù)據(jù)段中定義的所有字符串中的字符轉(zhuǎn)為大寫
意義 :
使用棧機制將外層循環(huán)的 cx 寄存器進行保存 , 以防內(nèi)層循環(huán)修改 cx
這是一種非常重要的機制
這就是為什么說棧通常用于保護現(xiàn)場
代碼 :
assume cs:code,ds:data,ss:stack
; 將數(shù)據(jù)段中定義的字符串全部轉(zhuǎn)為大寫
; 根據(jù)數(shù)據(jù)的特點 :
; 1. 每個字符串有效的字母為前三位
; 可以使用兩層嵌套的循環(huán)來實現(xiàn)
data segment
db 'dog '
db 'god '
db 'cat '
db 'tac '
data ends
stack segment
stack ends
code segment
start:
; 設(shè)置 ds 數(shù)據(jù)段寄存器
mov ax, data
mov ds, ax
; 循環(huán)遍歷所有行
mov cx, 4H
mov bx, 0H
my_loop_lines:
; 由于兩層循環(huán) , 為了防止內(nèi)層循環(huán)將外層循環(huán)的計數(shù)器 cx 修改 , 需要將外層循環(huán)的 cx 壓棧
push cx
mov cx, 3H
my_loop_char:
mov al, ds:[bx]
and al, 11011111B ; 轉(zhuǎn)為大寫
mov ds:[bx], al ; 注意寄存器是 al ( 8 位 )
inc bx
loop my_loop_char
pop cx
add bx, 10H - 3H ; 之所以要減去 3 是因為需要將 bx 指向下一行的首字符
loop my_loop_lines
finish:
mov ax,4cH
int 21H
code ends
end start