美文网首页汇编语言
寻址方式的综合应用

寻址方式的综合应用

作者: 柠檬就是酸 | 来源:发表于2018-09-03 12:23 被阅读0次

    问题

    1.png 2.png 3.png

    分析

    要修改的数据:

    1、DEC公司的排名字段

    2、DEC公司的收入字段

    3、DEC公司的产品字段,这个是字符的

    分析内存单元,可以看出来每个数据占用了多大的空间

    方法

    1、首先确定DEC公司记录的位置,R=seg:60

    2、确定访问的内容在记录中的位置

    3、确定排名字段在记录中的位置,也就是0CH

    4、修改R + 0CH的数据

    5、修改R + 0EH的数据

    6、10H处的数据是字符,所以要进一步确定每一个字符在字符串中的位置,一个字符一个字节

    ​ 所以修改R + 10H + 0,R + 10H + 1,R + 10H + 2 处的数据

    代码

    mov ax,seg
    mov ds,ax
    mov bx,60h                  ;确定记录的地址:ds:bx
    mov word ptr [bx+0ch],38  ;排名字段改成38
    add word ptr [bx+0eh],70  ;收入字段增加70
    ​
    mov si,0                  ;用si来定位产品字符串中的字符
    mov byte ptr [bx+10h+si],'V'
    inc si
    mov byte ptr [bx+10h+si],'A'
    inc si
    mov byte ptr [bx+10h+si],'X'
    

    这是实现这个功能的汇编代码,可以用C语言来写出来:

    struct company
    {
     char cn[3];  //定义公司的名称
     char hn[9];  //定义总裁姓名
     int pm;      //排名
     int sr;      //收入
     char cp[3];  //著名产品
    };
    ​
    struct company dec = {"DEC","Ken Olsen",137,40,"PDF"};
    ​
    int main()
    {
     int I;
     dec.pm = 38;
     dec.sr = dec.sr + 70;
     i = 0;
     dec.cp[i] = 'V';
     I++;
     dec.cp[i] = 'A';
     I++;
     dec.cp[i] = 'X';
    }
    

    对比一下二者的代码:

    mov ax,seg
    mov ds,ax
    mov bx,60h 
    mov word ptr [bx+0ch],38  ;C: dec.pm = 38;
    add word ptr [bx+0eh],70  ;C: dec.sr = dec.sr + 70;
    ​
    mov si,0                  ;C: i = 0;
    mov byte ptr [bx+10h+si],'V'  ;C: dec.cp[i] = 'V';
    inc si                      ;C: i++;
    mov byte ptr [bx+10h+si],'A'  ;C: dec.cp[i] = 'A';
    inc si                      ;C: i++;
    mov byte ptr [bx+10h+si],'X'  ;C: dec.cp[i] = 'X';x
    

    总结

    1、可以看出来,8086CPU提供的如[bx+si+idata]的寻址方式为结构化数据的处理提供了方便,使得我们可以在编程的时候从结构化的角度去看待所要处理的数据

    2、一般来说,我们可以用[bx+si+idata]的方式来访问结构体中的数据,用bx来定位整个结构体,用idata定位结构体中的某一个数据项,用si定位数组项中的每个元素,可以这样子写:

    [bx].idata、[bx].idata[si]

    相关文章

      网友评论

        本文标题:寻址方式的综合应用

        本文链接:https://www.haomeiwen.com/subject/vgubwftx.html