王爽 汇编语言_第2版 第7章 更灵活的定位内存地址的方法

;目的:处理数据段中的数据,将每一行的小写字母大写
;编写:Tony
;语言:asm
;时间:2020.3.24

 

;定义代码段、数据段、栈段
assume cs:code,ds:data,ss:stacksg

;数据段
data segment
db ‘ibm………….’
db ‘aoc………….’
db ‘ios………….’
db ‘asm………….’
data ends

;栈段
stacksg segment
dw 0,0,0,0,0,0,0,0 ;初始化8个字数据单元(不要把数据放在单引号内)
stacksg ends

;代码段
code segment

start: mov ax,stacksg ;栈段地址送ax
mov ss,ax ;ax中的数据送栈寄存器
mov sp,10h ;设置栈底的位置

mov ax,data ;数据段地址送ax
mov ds,ax ;ax中的数据送数据段寄存器

mov bx,0 ;初始化数据段中的偏移地址
mov cx,4 ;初始化外层循环次数

s: push cx ;保存外层循环数据到栈中
mov si,0 ;初始化数据段中的偏移地址
mov cx,3 ;初始化内层循环次数
s1: mov al,[bx+si] ;将ds:[bx+si]中的数据送al
and al,11011111b ;将al中的第5位置0,将字母大写
mov [bx+si],al ;将字母大写后写回内存单元
inc si ;偏移地址自增1
loop s1 ;循环处理将字母大写

add bx,10h ;修改段数据中行偏移地址
pop cx ;出栈恢复cx的数据
loop s ;循环处理段数据中的4段数据

mov ax,4c00h
int 21h
code ends
end start

版权声明:本文为TonyJia原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/TonyJia/p/12558474.html