簡介 :
利用嵌套循環將數據段中定義的所有字符串中的字符轉為大寫
意義 :
使用棧機制將外層循環的 cx 寄存器進行保存 , 以防內層循環修改 cx
這是一種非常重要的機制
這就是為什么說棧通常用于保護現場
代碼 :
assume cs:code,ds:data,ss:stack
; 將數據段中定義的字符串全部轉為大寫
; 根據數據的特點 :
; 1. 每個字符串有效的字母為前三位
; 可以使用兩層嵌套的循環來實現
data segment
db 'dog '
db 'god '
db 'cat '
db 'tac '
data ends
stack segment
stack ends
code segment
start:
; 設置 ds 數據段寄存器
mov ax, data
mov ds, ax
; 循環遍歷所有行
mov cx, 4H
mov bx, 0H
my_loop_lines:
; 由于兩層循環 , 為了防止內層循環將外層循環的計數器 cx 修改 , 需要將外層循環的 cx 壓棧
push cx
mov cx, 3H
my_loop_char:
mov al, ds:[bx]
and al, 11011111B ; 轉為大寫
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