关于基址变址寻址技术,利用栈暂存数据
参考王爽老师的《汇编语言》第四版,对P158的汇编代码,进行了个人理解标注。仅供参考,存在错误之处,请大家斧正。
assume cs:codesg,ds:datasg,ss:stacksg // 代码段cs、数据段ds、栈段ss
datasg segment
db 'ibm '
db 'dec '
db 'dos '
db 'var '
datasg ends
stack segemnt
dw 0,0,0,0,0,0,0,0 // 共16个字节
stack segment
codesg segment
start: mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov cx,4
s0:push cx // 将外层循环的cx压栈,共四个db数据
mov si,0
mov cx,3 // cx设置为内层循环的次数,每个db均含有三个字母
s:mov al,[bx+si] // 利用基址变址寻址
and al,11011111b // 小写转大写
mov [bx+si],al
inc si // inc si 代表si自增
loop s // 从栈顶弹出cx的值,恢复cx。
add bx,16
pop cx
loop s0 // 外层循环的loop指令将cx的计数值减1;
mov ax,4c00h // 程序结束的标志
int 21H
codesg ends
end start