曲径通幽论坛

标题: 数据处理 [打印本页]

作者: beyes    时间: 2009-4-1 00:26
标题: 数据处理
1、BX,SI,DI,BP
像:mov ax, [cx]    mov ax, [ax]    mov ax, [dx]   mov ax, [ds] 这些都是错误的写法。

如 mov ax, [bx + bp]     mov ax, [si + di]  都为错误的写法。


2、在没有寄存器名存在的情况下,用操作符 X ptr 指明内存单元的长度,X 在汇编指令中可以为 word 或 byte
如:
     mov  word ptr ds:[0], 1
     mov  byte ptr ds:[0], 1

3、相对基址变址寻址
[bx + si + idata]    [bx + di + idata]   [bp + si + idata]    [bp + di + idata]
在应用中和C语言的对比
strcut company {
      char cn[3];
      char hn[9];
      int    pm;
      int    sr;
      char  cp[3];
};
struct comany dec = { "DEC", "Ken Olsen", 137, 40, "PDP" };
修改 dec.cp[3] 中的 PDP 字符
i = 0;
dec.cp = 'V';
i++;
dec.cp = 'A';
i++;
dec.cp = 'X';
和汇编对比,汇编修改:
mov si, 0
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'
用 [bx + idata + si] 的方式来访问结构体中的数据。 bx 定位整个结构体; idata 定义结构体中的某一个数据项,用 si 定位数组项中的每个元素。汇编提供的更为贴切的书写方式如:[bx].idata[si]。
                                                                                比较C语言中的:dec.cp
dec 是个变量名,指名了结构体的变量地址,cp指名数据项cp的地址,而 i  用来定位 cp 中的每一个字符。这和汇编是很相似的。
        





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2