汇编语言(第三版)-- 问题7.9

将datasg段中每个单词的前四个字母改为大写字母

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

stacksg segment
  dw 0,0,0,0,0,0,0,0      # 8个字单元用作栈空间
stacksg ends

datasg segment
  db '1. display      '
  db '2. brows        '
  db '3. replace      '
  db '4. modify       '
datasg ends

codesg segment
   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,4               # 定义内层循环次数

s: mov al,[bx+3+si]       # 将要处理的字母放入低位寄存器
   and al,11011111b       # 将小写字母转换为大写,大写字母第6位为0
   mov [bx+3+si],al       # 将处理完的字母传回原本的字符串位置
   inc si                 # 字符串偏移自增
   loop s                 # 内层循环

   add bx,16              # 数据段偏移处理
   pop cx                 # 将保存的外层循环次数存入cx寄存器
   loop s0                # 外层循环

   mov ax,4c00h
   int 21h

codesg ends
end start

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

推荐阅读更多精彩内容