Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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.

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.
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.
Review Debugger
If you need a review of the debugger and some information on flags and registers you should take a look at the review on this page.
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 BYTE" &flagName="
flagVal BYTE?,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. You also need to define eflags which is a DWORD variable and should be located in the data segment of main. Here is an example call
ShowFlag CF,1
This shows the carry flag at bit 1
You can use global variables here as needed but you really must pass parameters to the showRegister procedure.

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Beyond Big Data Using Social MDM To Drive Deep Customer Insight

Authors: Martin Oberhofer, Eberhard Hechler

1st Edition

0133509796, 9780133509793

More Books

Students also viewed these Databases questions

Question

Define HRM and its relation to organizational management

Answered: 1 week ago

Question

Explain the theoretical issues surrounding the HRM debate

Answered: 1 week ago