求分析汇编程序功能…… DATA SEGMENT DA1 DB 10 DUP(2,3) DA2 DW 10 DUP(02

问题描述:

求分析汇编程序功能…… DATA SEGMENT DA1 DB 10 DUP(2,3) DA2 DW 10 DUP(0203H) DA3 DB DATA ENDS CODE
1个回答 分类:综合 2014-10-21

问题解答:

我来补答
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处理器对存储器的组织方式是“小端存储”方式,所以,在字节上,顺序有所颠倒。
 
 
展开全文阅读
剩余:2000