Reference no: EM133393810
Question: One of the things missing from asmLib is the ability to display the values of all of the registers and the flags to the screen. In this assignment you are going to get a chance to do exactly that for me.
You are to create a procedure called dumpRegisters that will dump the contents of each register to the screen. This includes the flags register and each independent flag. The output of your dumpRegisters procedure should look like this:
EAX: 5afafc EBX: 9db000 ECX: 5ebdec EDX: 5ebdec
ESI: 5ebdec EDI: 5ebdec EBP: 5afab0 ESP: 5afaa8
EIP: 763afa29 EFL: 246 CF=0 SF=0 ZF=1 OF=0 AF=0 PF=1
C:\Users\gstev\source\repos\AsmProject\AsmProject\Debug\AsmProject.exe (process 3468) exited with code 0.
Press any key to close this window . . .
Notice the use of the tab macro?
On the surface this seems like an easy chore for the most part but you need to be careful how you save and restore the registers. Remember these registers should match what is shown in the registers window of the debugger.
Some Hopefully Helpful Things
You should have your dumpRegisters procedure call a procedure called showRegister. You want to pass the name of the register along with the value of the register to be displayed. I found that it was probably best to use invoke for this. My prototype looks like this:
showRegister PROTO,
regName:PTR BYTE , regValue:DWORD
Displaying each value of the flags register is probably the most difficult thing here. Because it is I am going to provide a macro that you can use to make the chore easier:
ShowFlag MACRO flagName,shiftCount
LOCAL flagStr, flagVal, L1
.data
flagStr DB " &flagName="
flagVal DB ?,0
.code
push eax
push edx
mov eax,eflags ; retrieve the flags
mov flagVal,'1'
shr eax,shiftCount ; shift into carry flag
jc L1
mov flagVal,'0'
L1:
mov edx,OFFSET flagStr ; display flag name and value
call WriteString
pop edx
pop eax
ENDM
To use this you can simply call showFlag, the flag to show and its bit position. Here is an example call