阅读汇编程序题(向283802332大神求助)

BUF DB 12,34,45,78,90
DATA DW 1,235H,90H
MOV SI,2
MOV BX,2
MOV AL,BUF[BX][SI]
MOV BX,DATA[SI]
1.寄存器AL的值是_________,寄存器BX的值是________。
2.汇编语言中的数组排序和C++中的数组排序有区别吗?若有,请指出

  首先 逐句语句分析

  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来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答

超高分请教一道汇编语言编程问题
内容是编写由键盘输入10个4位的数据并将这些数由大到小或由小到大进行排序其结果输出在显示屏上的程序.程序已经写好:DATASEGMENTLENEQU10ARRAYDW10DUP(?)MESSDB0DH,0AH,'PLEASEINPUT... 内容是编写由键盘输入10个4位的数据并将这些数由大到小或由小到大进行排序其结果输出在显示屏上的程序.程序已经写好:DA...

编写一个程序,其功能是:将两个两位数的正整数a,b合并成一个整数放在c中...
1、 编写一个程序,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a中的十位和个位数一次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。例如:a=45,b=12时,执行程序后,c=4152.2010喜羊杨 | 浏览9151 次 |举报 我有更好的答案推荐于2017-12-15 ...

汇编语言逻辑左移
例如这道题(00)00 0100 0010 1000,我们把它的前两位去掉,然后接到后面0001 0000 1010 00(00)PS:若有不明白的地方,可以追问 本回答由提问者推荐 举报| 答案纠错 | 评论 11 4 283802332 采纳率:78% 来自:芝麻团 擅长: C\/C++ 汇编语言 Linux 工程技术科学 操作系统开发 其他回答 好像是A0H吧。 ad66...

相似回答
大家正在搜