早教吧 育儿知识 作业答案 考试题库 百科 知识分享

麻烦前辈解释下下面这个指令MOVAX,WORDPTRINDAT[SI-2]之前的INDATADB0FFH,0AAH,55H,00H麻烦详细解释一下进入AX的是第几个数?谢谢~

题目详情
麻烦前辈解释下下面这个指令MOV AX,WORD PTR INDAT[SI-2] 之前的 INDATA DB 0FFH,0AAH,55H,00H 麻烦详细解释一下 进入AX的是第几个数? 谢谢~
▼优质解答
答案和解析
楼主应该这样理 1.word ptr 即指定了操作数INDATA[SI-2]类型为字(二字节) 其实对于包含寄存器AX的操作数为立即数的指令完全可以不用word ptr 编译器直接可以认定操作数是一个字型数据。如:mov ax,0 或 mov ax,[di]则直接编译成功 2.既然SI指向数据段的首地址(一般为0),那么SI肯定指向了0FFH这个字节数据的地址。则[SI-2]还在INDATA数据域前面…… 所以你的代码里肯定是错了,应该是INDATA[SI+2],不然在不知道上下文的前提下不知道前面有什么数据,可能会出错的。如果你在INDATA前面就还有数据,那么SI就不指向它了,你给出来的数据为无效…… 3.INDATA本身为BYTE型,而寻址、运行时该类型与程序无关。 MOV AX,WORD PTR INDATA[SI+2]的意思就是“取地址为DS:[OFFSET INDATA+2]处的数据 传到AX中”,注意AX中的高字节是高地址的数据。 4.按照上面所说,应该是INDATA的第一个字节偏移2后取“字型”数据,AX值为0050H