发布网友 发布时间:2023-07-12 14:17
共2个回答
热心网友 时间:2024-08-04 09:40
1、答案:00H,LCALL调用把地址0221H放到堆栈中,先低后高,所以08H是00H,PC也会变化,这里就不说了追答先看下LCALL的描述:
LCALL addr16
长调用,这条指令无条件调用位于16位地址addr16的子程序。它把PC加3以获得下一条指令的地址并将其压入堆栈(先低位字节后高位字节),同时每压栈一字节SP加1.然后把指令的第二和第三字节(A15~A8,A7~A0)分别装入PC的高位和低位字节中,接着从PC所指出的地址开始执行程序。
这里用了两个东西PC和堆栈。
PC用来放地址的,就是说下次程序要运行哪条指令,先把地址放进去,你这里没涉及到,描述都在上面,稍微复杂点。
然后呢是堆栈,LCALL是调用命令,相当于C语言的函数调用,调用后函数完了要返回,返回到程序原来运行的那个地方,这样的话,程序必须知道是什么地方,所以呢,运行子程序前先把原来的地方,也就是地址存起来。就是存到堆栈里了,这也就是压栈。返回时叫出栈。
而地址呢,程序运行哪里就先把那的地址放到PC里,题目中原来是2100H,然后要调用了,调用后Pc地址就要变了,所以先把2100H存起来,存到堆栈里,先存低位,也就是00H放到地址的08H,然后21H放到09H里,存的时候堆栈地址先加1,所以从08H开始存。。。
应该明白了吧?
热心网友 时间:2024-08-04 09:40
错误就在别人要的是2进制,你却用16进制,29的8位二进制码为0001 1101 。8 4 2 1 码。这样算出来才是对的