首先 逐句语句分析
BUF DB 12,34,45,78,90
这条语句在内存中的存储情况是
ds:0 0C 22 2D 4E 5A
12,34,45,78,90的十六进制
这是ds:0~ds:4的内存情况
DATE DW 1,235H,90H 这条语句在内存中的存储情况是
ds:5 01 00 35 02 90 00 这是ds:5~ds:0A 的内存情况
MOV SI,2 语句执行后,SI = 2H
MOV BX,2
语句执行后,BX = 2H
MOV AL,BUF[BX][SI]
首先BUF[BX][SI]的寻址方式是"相对基址变址寻址"
所以BUF[BX][SI] = BUF + BX + SI
= 0 + 2H + 2H
= 4H
因为DS:4 的 值是 5A
所以AL = 5A
MOV BX,DATE[SI] ;不要写成DATA会和汇编的data起 ;冲突的
首先DATA[SI]的寻址方式是"寄存器相对寻址"
所以DATE[SI] = DATE + SI
= 5H + 2H
= 7H
因为DS:7 的 值是35H,DS:8的值是02H
所以BX的值是0235H
寻址方式的简介在后面,楼主可以参考
终上所述
1.寄存器AL的值是__5AH___,寄存器BX的值是__0235H____。
2.汇编语言中的数组排序和C++中的数组排序有区别吗?若有,请指出 答:因为我不会C++,所以这里我不好解答,不好意思
PS: 不好意思,只要是寻址方式的东西介绍太多了,不好排版,会影响阅读,楼主凑合看一下吧
楼主若有不明白的地方,可以追问
寻址方式的简介
段地址(SA)和偏移地址(EA)
1.直接寻址
直接寻址方式是指操作数的偏移地址在指令中直接给出,例如
MOV AX,[1234H]
EA = 1234H,SA=DS
2.寄存器间接寻址
寄存器间接寻址是指操作数的偏移地址在BX,BP,SI,DI四个寄存 器之一中
(1) 当以BX,SI或DI寄存器进行间接寻址时,操作数的物理地址 有DS中的段地址与BX,SI或DI中的偏移地址构成
(2) 当以BP寄存器进行间接寻址时,操作数的物理i地址有SS中的段地址与BP中的偏移地址构成
MOV AX,[BX,SI或DI]
EA = BX,SI或DI,SA = DS
MOV AX,[BP] EA = BP,SA = SS
3.寄存器相对寻址
寄存器相对寻址是指操作数的偏移地址是BX,BP,SI,DI之一的值和一个8位或16位偏移地址之和
(1) 当以BX,SI或DI寄存器进行间接寻址时,操作数的物理地址 有DS中的段地址与BX,SI或DI中的偏移地址构成
(2) 当以BP寄存器进行间接寻址时,操作数的物理i地址有SS中的段地址与BP中的偏移地址构成
MOV AX,[BP+100H] EA = BP+100H,SA = SS
MOV AX,[BX,SI或DI + 100H] EA = BX,SI或DI + 100H,SA = DS
[BX+100H] 等价于 200H[SI]
4.基址变址寻址
基址变址寻址是指操作数的偏移地址是一个基址寄存器BX,BP的值和一个变址寄存器SI,DI的值之和
(1) 当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成
(2) 当以BP作为基址寄存器是,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成
MOV AX,[BX+DI或SI] EA = BX+SI或DI,SA = DS
MOV AX,[BP+DI或SI] EA = BP+SI或DI,SA = SS
[BX+SI] 等价于 [BX]+[SI]
5.相对基址变址寻址
相对基址变址寻址是指操作数的偏移地址是一个基址寄存器BX,BP的值加上一个变址基础器SI,DI的值,再加上指令中的一个8位,16位偏移量之和
(1) 当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成
(2) 当以BP作为基址寄存器是,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成
MOV AX,[BX+100H+DI或SI] EA = BX+DI或SI+100H,SA = DS
MOV AX,[BP+100H+DI或SI] EA = BP+DI或SI+100H,SA = SS
[BX+SI+100H] 等价于 100H[BX+SI] 等价于 [BX]+[SI]+100H来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考