讨论寻址方式的综合应用
关于DEC公司的一条记录
公司名称:DEC
总裁名称:Ken Olsen
排 名:137
收 入:40(亿美元)
著名产品:PDP(小型机)
将他里面的一些信息进行修改: 排名137改为38 ,收入40加上70,产品改为VAX
汇编代码:
assume cs:code,ds:data
data segment
db 'DEC'
db 'Ken Olsen'
dw 137,40
db 'PDP'
data ends
code segment
start:
;修改 137->38
;40 -> 40+70
; PDP->VAX
;首先获取数据地址
mov ax,data
mov ds,ax
; 137的位置是 ds:0Ch
mov bx,0
mov ax,38
mov word ptr [bx].0ch,38 ;采用结构的方式修改
add word ptr [bx].0eh,70 ;40的位置0eh
;修改'PDP' 位置在10h
mov si,0
mov byte ptr [bx].10h[si],'V' ;类似于c语言中的 结构体名.成员名[数组下标]
inc si
mov byte ptr [bx].10h[si],'A'
inc si
mov byte ptr [bx].10h[si],'X'
mov ax,4c00h
int 21h
code ends
end start
初始存储器:
其中 0089H 和0028H 分别对于十进制的 137 和 40
修改后:
0026H 和 006EH 对于十进制的 38和110 修改成功。
如果是C语言来写,那么应该是这样的:
struct company{
char cn[3];
char hn[9];
int pm;
int sr;
char cp[3];
};
struct company dec={"DEC","Ken Olsen",137,40,"PDP"};
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';
return 0;
}