标志寄存器三

例题:有四个字符串,把每一个字符串的字母大写

assume cs:codesg,ds:datasg

datasg segment

db 'ibm.............'

db 'dec.............'

db 'dos.............'

db 'var...............'

datasg ends

codesg segment

start:mov ax,datasg

mov ds,ax

mov bx,0

mov cx,4

s0:mov dx,cx

mov si,0

mov cx,3

s:mov al,[bx+si]

and al,11011111b

mov [bx+si],al

inc si

loop s

add bx,16

mov cx,dx

loop s0

codesg ends

end start

解析:

注意:loop s命令是程序从s处到loop s处执行cx遍。

所以说这个程序就是s0-(loop s0)处执行4遍,s-(loop s)处执行3遍

bx代表每一行的偏移地址,si代表每一列的偏移地址


2.第二种做法:运用栈

assume cs:codesg,ds:datasg,ss:stacksg

datasg segment

db 'ibm.............'

db 'dec.............'

db 'dos.............'

db 'var...............'

datasg ends

stacksg segment

dw 0,0,0,0,0,0,0,0  一个数据占一个字,可按需增加或减小

stacksg  ends

codesg segment

start:mov ax,stacksg

mov ss,ax

mov sp,16

mov ax,datasg

mov ds,ax

mov bx,0

mov cx,4

s0: push cx

mov si,0

mov cx,3

s:mov al,[bx+si]

and al,110111111b

mov [bx+si],al

inc si

loop s

add bx,16

pop cx

loop s0

mov ax,4c00H

int 21h

codesg ends

end start

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。