zoukankan      html  css  js  c++  java
  • 汇编语言实验六

    编程,将 datasg 段中的每个单词的前 4 个字母改为大写字母。

    assume cs:codesg,ss:stacksg,ds:datasg
    
    stacksg segment
        dw 0,0,0,0,0,0,0,0
    stacksg ends
    
    datasg segment
        db '1. display         '
        db '2. brows           '
        db '3. replace         '
        db '4. modify          '
    datasg ends
    
    codesg segment
        start:
    codesg ends
    
    end start

    分析:

    在 datasg 中定义了 4 个字符串,为了便于程序的编写,我们可以将这 4 个字符串的长度都设为 16 字节。

    因为它们是连续存放的,所以我们可以将这 4 个字符串看作一个 4 行 16 列的二维数组(注意这里的因果关系)。

    如上图所示,需要完成一个 4 * 4 次的二重循环,用变量 R 定位行,常量 3 定位每行要修改的起始位置,变量 P 定位相对于起始列要修改的列。

    所以寻址方式应该是 [ bx + si + idata ] 的方式。即:可以用 bx 来作变量 R,si 来作变量 P,用 [ bx + 3 + si ] 的方式来对目标单元进行寻址。

    得到汇编程序如下:

     1  assume cs:codesg,ss:stacksg,ds:datasg
     2   
     3  stacksg segment
     4       dw 0,0,0,0,0,0,0,0
     5  stacksg ends
     6   
     7  datasg segment
     8      db '1. display         '
     9      db '2. brows           '
    10      db '3. replace         '
    11      db '4. modify          '
    12  datasg ends
    13  
    14  codesg segment
    15        start: mov ax,stacksg
    16               mov ss,ax
    17               mov sp,1618  
    19               mov ax,datasg
    20               mov ds,ax ;准备好要访问的内存数据
    21  
    22               mov bx,0  ;由于已经设置好ds的值,所以开始偏移地址bx应为0
    23               mov cx,4
    24  
    25           s0: push cx
    26               mov si,0 ;我一开始写的是 mov si,[bx+3],如此的话,在访问内存时就不用加上再次加上 常量 3 了
    27               mov cx,4 ;确定内循环的次数
    28  
    29            s: mov al,[bx+si+3]
    30               and al,11011111b
    31               mov [bx+si+3],al
    32               inc si
    33               loop s
    34  
    35               add bx,16
    36               pop cx   ;重新从栈中获取外循环次数
    37               loop s0  ;判断
    38  
    39               mov ax,4c00h
    40               int 21h
    41  codesg ends
    42  
    43  end start    
  • 相关阅读:
    【JS】在JS方法中返回多个值的三种方法
    【装饰】博客园背景轮播
    【jquery】查看全文/收起
    jQuery节点查找方法
    点击事件的累加问题
    微信小程序动画效果集合
    【数组】数组的操作
    【Mock.js】 入门
    【下拉刷新】WEUI下拉刷新
    __iomem作用
  • 原文地址:https://www.cnblogs.com/KKSJS/p/9979392.html
Copyright © 2011-2022 走看看