曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5747|回复: 0
打印 上一主题 下一主题

[8086] 数据处理

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-4-1 00:26:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、BX,SI,DI,BP
      在8086中,只有这4个寄存器是可以用在“[...]”中进行内存单元寻址的。
像:mov ax, [cx]    mov ax, [ax]    mov ax, [dx]   mov ax, [ds] 这些都是错误的写法。

      在[...]中,这4个寄存器可以单个出现,或只能以四种组合出现:bx和si、 bx和di、bp和si、bp和di。
如 mov ax, [bx + bp]     mov ax, [si + di]  都为错误的写法。

      只要在[...]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。

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 中的每一个字符。这和汇编是很相似的。
        
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-20 14:57 , Processed in 0.073705 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表