私は C 言語を使用してプログラムを作成しました。このプログラムでは、特定のアドレスへのポインターによってアクセスでき、オペコードはそれを出力できました。この方法を使用して、自己修正コードを作成しました。8086 でこれを行いました。建築。マイクロコントローラ PIC18F2550 で実行したいです。Mplab C18 3.46 で Mplab IDE 8.92 を使用しています。マイクロコントローラでこれを実行したことはありません。8086 とは異なり、ここではオペコードにアクセスできません。ポインタはオペコードのアドレスです。ただし、戻り値は 0X00 です。これはコード サンプルです。
#include <stdio.h>
#include <stdlib.h>
void fsub(void){
int a,b;
a=3;b=5;
a-=b;
printf("a-b=%d\n",a);
}
void fadd(void)
{
int a,b;
a=3;b=5;
a+=b;
printf("a+b=%d\n",a);
}
void retadd(void);
void main()
{
int i;
unsigned char *instSub,*instAdd;
unsigned char instructionSub[2];
void *retadd_addr=(void*)retadd;
retadd();
instSub=(unsigned char*)retadd_addr;
instAdd=(unsigned char*)retadd_addr+2;
printf("%x\n", *instSub);
printf("%x\n", *instAdd);
while(1);
}
void retadd(void)
{
fsub();
fadd();
}
![mplab からの画像]この画像は値1を示しています