zoukankan      html  css  js  c++  java
  • 王爽 汇编 问题7.7,编程将datasg段中每个单词改为大写字母

    一、代码实现

     1 ;目的:处理数据段中的数据,将每一行的小写字母大写
     2 ;编写:Tony
     3 ;语言:asm
     4 ;时间:2020.3.24
     5 
     6 
     7 
     8 ;定义代码段、数据段、栈段
     9 assume cs:code,ds:data,ss:stacksg
    10 
    11 ;数据段
    12 data segment
    13     db 'ibm.............'
    14     db 'aoc.............'
    15     db 'ios.............'
    16     db 'asm.............'
    17 data ends
    18 
    19 ;栈段
    20 stacksg segment
    21     dw 0,0,0,0,0,0,0,0        ;初始化8个字数据单元(不要把数据放在单引号内)
    22 stacksg ends
    23 
    24 ;代码段
    25 code segment
    26 
    27 start:  mov ax,stacksg         ;栈段地址送ax
    28         mov ss,ax            ;ax中的数据送栈寄存器
    29         mov sp,10h            ;设置栈底的位置
    30         
    31         mov ax,data            ;数据段地址送ax
    32         mov ds,ax            ;ax中的数据送数据段寄存器
    33         
    34         mov bx,0            ;初始化数据段中的偏移地址
    35         mov cx,4            ;初始化外层循环次数
    36                 
    37 s:      push cx                ;保存外层循环数据到栈中
    38         mov si,0            ;初始化数据段中的偏移地址
    39         mov cx,3            ;初始化内层循环次数
    40 s1:     mov al,[bx+si]        ;将ds:[bx+si]中的数据送al
    41         and al,11011111b    ;将al中的第5位置0,将字母大写
    42         mov [bx+si],al        ;将字母大写后写回内存单元
    43         inc si                ;偏移地址自增1
    44         loop s1                ;循环处理将字母大写
    45         
    46         add bx,10h            ;修改段数据中行偏移地址
    47         pop cx                ;出栈恢复cx的数据
    48         loop s                ;循环处理段数据中的4段数据
    49 
    50         mov ax,4c00h
    51         int 21h
    52 code ends
    53 end start

    二、上机调试

    0)话不多说,进入虚拟机的xp系统,打开cmd命令窗口,准备开撸……查看内存中的汇编代码

     1)在调试之前查看一下各个寄存器的数据

     2)用t指令开始单步调试代码,执行第一条指令 MOV AX,0B3C,看寄存的变化

     栈段地址0B3C送赋值给寄存器ax

    3)继续执行下一条指令

     将栈段地址送栈段寄存器ss

    4)在执行完mov ds,ax后,查看初始化后数据段中的数据

     5)略过……,直接来到第一次外循环处

     cx压入栈,保存cx数据到栈中

    6)第一次内循环开始处

     7)第一次内循环结束处

     8)查看数据段中的数据

     可以看出第一段数据的小写字母已经大写了,嗯……成功了一小步

    9)来到第二次外循环处

     最明显的就是数据段的偏移地址BX=0X0010,此时就开始准备转换第二组数据'aoc'

    10)第二次内循环开始处

      11)第二次内循环结束处

      12)查看数据段中的数据

     可以看出第二段数据的小写字母已经大写了……开心啊

    13)略过……直接执行完成后数据段中的数据

     嗯哼,成功啦,全部变成大写字母了……

    14)程序正常结束

     15)返回cmd

  • 相关阅读:
    设计模式的原则
    命令模式
    访问者模式
    策略模式
    外观模式
    组合模式
    原型模式
    合并有序数组
    判断二叉树是否对称
    中序遍历二叉树
  • 原文地址:https://www.cnblogs.com/TonyJia/p/12558474.html
Copyright © 2011-2022 走看看