2013-02-12 336 views
0

我在計算天氣時無法使用註冊表中的數據內容加載註冊表,或者在執行LDI時間接地使用該值的地址加載寄存器。彙編語言 - LDI

例子:

x3000 LDI R6, far 
x3001 ...(some command) 
x3002 ...(some command) 
x3003 far x6000 
... 
x6000 xf000 

是什麼excecuting X3000後在R6中的數據?

回答

0

以及藉此例如

.orig x3000 
LDI R6, far 
ADD R0,R0,#0 
ADD R0,R0,#0 
far .fill x6000 
.end 

組裝和轉儲

hexdump -C test.obj 
00000000 30 00 ac 02 10 20 10 20 60 00     |0.... . `.| 
0000000a 

和手拆卸

0x3000: 0xAC02 ldi r6,#+2 
0x3001: 0x1020 add r0,r0,#0 
0x3002: 0x1020 add r0,r0,#0 
0x3003: 0x6000 

的LDI指令執行此:

DR = mem[mem[PC† + SEXT(PCoffset9)]]; 
setcc(); 

指令的低9位是0x002,其符號擴展爲0x0002。 PC是修改的電腦,所以當執行地址0x3000的指令時,電腦實際上是0x3001所以

DR = mem[mem[0x3001+0x0002]] 
DR = mem[mem[0x3003]] 
DR = mem[0x6000] 
DR = 0xF000 using your definition for what lives at address x6000. 
DR is r6 so 0xF000 is stored in r6. 
0xF000 is considered a negative so the flags are N = 1, Z = 0, P = 0 if I understand the flags correctly. 
+0

真棒有道理!很好的解釋! – 2013-02-12 23:01:45