求分析汇编程序功能…… DATA SEGMENT DA1 DB 10 DUP(2,3) DA2 DW 10 DUP(0203H) DA3 DB ? DATA ENDS CODE

如题所述

DATA SEGMENT ;定义数据段,数据段名为:DATA
DA1 DB 10 DUP(2,3)
;上句定义20个字节(BYTE)型数据存储单元,名为DA1,
初始值为2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3
DA2 DW 10 DUP(0203H)
;上句定义10个字(WORD)型数据存储单元,名为DA2,初始值均为0203H(十六进制数
DA3 DB ? ;定义1个字节(BYTE)型数据存储单元,名为DA3,未赋初始值
DATA ENDS ;数据段结束

CODE ;此处为代码段名,以下应开始定义代码段了……追问

这个后面还有……ST: MOV AX,DATA
MOV DS,AX
LEA BX,DA1
XOR SI,SI
XOR AL,AL
MOV CX,10
LP: ADD AL,[BX]
ADD AL,BYTE PTR DA2[SI]
ADD SI,2
INC BX
LOOP LP
MOV DA3,AL
MOV AH,4CH
INT 21H
CODE ENDS
END ST
整个实现了什么功能啊

追答

你追问的内容属于代码段的部分,先逐行说明:
ST: MOV AX,DATA
MOV DS,AX ; 以上这两句作用是将数据段DATA与数据段寄DS存器相关联
LEA BX,DA1 ;将DA1首地址送入BX
XOR SI,SI ;利用异或指令清零SI寄存器
XOR AL,AL ;利用异或指令清零AL寄存器
MOV CX,10 ;将CX寄存器赋初值10,作为循环计数初始值
LP: ADD AL,[BX]
; AL寄存器的内容加上DA1中某一字节单元的内容(每次循环都是不同的字节单元),结果保存在AL
ADD AL,BYTE PTR DA2[SI]
;AL寄存器的内容加上DA2中某一字节单元的内容(每次循环都是不同的字节单元,而且是从开始算起第奇数个字节单元),结果保存在AL
ADD SI,2 ;SI寄存器的值加2
INC BX ;BX寄存器的值加1
LOOP LP ;循环语句:只要CX的值不为0,便跳转至标号LP处继续执行
MOV DA3,AL ;将AL的值存入DA3
MOV AH,4CH
INT 21H ;这两句表明程序退出
CODE ENDS ;代码段结束伪指令
END ST ;全部汇编源程序结束伪指令

【整体功能】:
由于DA1中数据为:
2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3

02H,03H,02H,03H,02H,03H,02H,03H,02H,03H,
02H,03H,02H,03H,02H,03H,02H,03H,02H,03H
DA2中数据为:
03H,02H,03H,02H,03H,02H,03H,02H,03H,02H,
03H,02H,03H,02H,03H,02H,03H,02H,03H,02H
在你给出的程序的循环体中,将DA1的前10个数据以及DA2的第1、3、5、7、9、11、13、15、17、19个 数据(一共20个数据)做和,结果为5*5+3*10=25+30=55(十进制的),十六进制形式就是37H。
解释一下,为什么字型数据0203H在内存中变成了03H,02H,这是由于80X86处理器对存储器的组织方式是“小端存储”方式,所以,在字节上,顺序有所颠倒。

温馨提示:答案为网友推荐,仅供参考
相似回答