Compare commits
No commits in common. "904c398911d524da2c81dd2c871492ed89cff9ca" and "96d13813037cbceab7cfafec45a0842471bc11b0" have entirely different histories.
904c398911
...
96d1381303
@ -4,8 +4,6 @@
|
|||||||
#include "aliases.h"
|
#include "aliases.h"
|
||||||
#include "sim86_instruction.h"
|
#include "sim86_instruction.h"
|
||||||
|
|
||||||
#define REGISTER_COUNT 13
|
|
||||||
|
|
||||||
void set_register(register_access reg, u16 new_value);
|
void set_register(register_access reg, u16 new_value);
|
||||||
u16 get_register(register_access reg);
|
u16 get_register(register_access reg);
|
||||||
const char *get_register_name(register_access reg);
|
const char *get_register_name(register_access reg);
|
||||||
|
BIN
8086_sim/listing_0043_immediate_movs
Normal file
BIN
8086_sim/listing_0043_immediate_movs
Normal file
Binary file not shown.
BIN
8086_sim/listing_0044_register_movs
Normal file
BIN
8086_sim/listing_0044_register_movs
Normal file
Binary file not shown.
1
8086_sim/listing_0045_challenge_register_movs
Normal file
1
8086_sim/listing_0045_challenge_register_movs
Normal file
@ -0,0 +1 @@
|
|||||||
|
И""ЛDDЙffК<66><D09A><EFBFBD>а<EFBFBD>л<EFBFBD>С
|
@ -2,9 +2,9 @@
|
|||||||
#include "include/aliases.h"
|
#include "include/aliases.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
static u16 registers[REGISTER_COUNT] = {0};
|
#define REGISTER_COUNT 13
|
||||||
|
|
||||||
#define BIT_PER_BYTE 8
|
static u16 registers[REGISTER_COUNT] = {0};
|
||||||
|
|
||||||
void set_register(register_access reg, u16 new_value) {
|
void set_register(register_access reg, u16 new_value) {
|
||||||
if (reg.Count == 2) {
|
if (reg.Count == 2) {
|
||||||
@ -12,7 +12,7 @@ void set_register(register_access reg, u16 new_value) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 shift = (u16)(reg.Offset) * BIT_PER_BYTE;
|
u16 shift = (u16)(reg.Offset) * (u16)sizeof(u8);
|
||||||
u16 mask = 0xff00;
|
u16 mask = 0xff00;
|
||||||
|
|
||||||
registers[reg.Index] &= (mask >> shift);
|
registers[reg.Index] &= (mask >> shift);
|
||||||
@ -24,10 +24,8 @@ u16 get_register(register_access reg) {
|
|||||||
return registers[reg.Index];
|
return registers[reg.Index];
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 shift = (u16)(reg.Offset) * BIT_PER_BYTE;
|
// TODO (Abdelrahman): Implement this
|
||||||
u16 mask = 0x00ff;
|
return 0;
|
||||||
|
|
||||||
return (registers[reg.Index] >> shift) & mask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *get_register_name(register_access reg) {
|
const char *get_register_name(register_access reg) {
|
||||||
|
BIN
8086_sim/sim86
BIN
8086_sim/sim86
Binary file not shown.
@ -42,8 +42,6 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
u32 offset = 0;
|
u32 offset = 0;
|
||||||
|
|
||||||
bool accessed_registers[REGISTER_COUNT] = {false};
|
|
||||||
|
|
||||||
while (offset < size) {
|
while (offset < size) {
|
||||||
instruction decoded;
|
instruction decoded;
|
||||||
Sim86_Decode8086Instruction(size - offset, buffer + offset, &decoded);
|
Sim86_Decode8086Instruction(size - offset, buffer + offset, &decoded);
|
||||||
@ -57,22 +55,13 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
if (dest.Type == Operand_Register) {
|
if (dest.Type == Operand_Register) {
|
||||||
mov_to_register(dest.Register, source);
|
mov_to_register(dest.Register, source);
|
||||||
|
printf("%s: 0x%04x\n", get_register_name(dest.Register),
|
||||||
accessed_registers[dest.Register.Index] = true;
|
get_register(dest.Register));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (u32 i = 0; i < REGISTER_COUNT; ++i) {
|
|
||||||
if (accessed_registers[i]) {
|
|
||||||
register_access reg = {i, 0, 2};
|
|
||||||
u16 value = get_register(reg);
|
|
||||||
|
|
||||||
printf("%s: 0x%04x (%d)\n", get_register_name(reg), value, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user