Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

The following instruction set is supported by a simple processor with a few new

ID: 3855159 • Letter: T

Question

The following instruction set is supported by a simple processor with a few new instructions added. The format of most instructions is defined as follows. bits 15:14 13:10 9 8:o 5:3 2:0 unused opcode w Srci src dst field where the fields are defined as follows. opcode: operation to be performed by the processor w: write back ALU output to register file (1 yes, 0 src1: address of the first ALU operand in the register file src2: address of the second ALU operand in the register file dst: address in the register file where the output is written For opcodes B EQ, BLEZ and JUMP, the 6 least significant bits (5:0) give an address in the instruction memory, which is byte -addressed. The opcode HALT has all operand bits (9:0 being 0. When an instruction has only two operands, the field for the unused operand is filled with 0-bits. For example, bits (5:3) for SLL are all zero because src2 is not used. The opcode and meaning of these instructions are listed in the following table. opcode Binary encoding Operation ADD SUB 0x1 R Lsrcl src21 Rudsti SRL XOR. OR R Lsrcl AND 0x8 RLsrc11 1 RI dst INCR. IfRIsrcij 0, branch to BRZ IfR Src11 s0, branch to BLEZ 0XE p to Addr JUMP HALT Stop execution

Explanation / Answer

Hi,

You can use the command info line to map source lines to program addresses (and vice versa), and the command disassemble to display a range of addresses as machine instructions. You can use the command set disassemble-next-line to set whether to disassemble next source line when execution stops. When run under GNU Emacs mode, the info line command causes the arrow to point to the line specified. Also, info line prints addresses in symbolic form as well as hex.

info line location

Print the starting and ending addresses of the compiled code for source line location. You can specify source lines in any of the ways documented in Specify Location.

For example, we can use info line to discover the location of the object code for the first line of function m4_changequote:

We can also inquire (using *addr as the form for location) what source line covers a particular address:

After info line, the default address for the x command is changed to the starting address of the line, so that ‘x/i’ is sufficient to begin examining the machine code (see Examining Memory). Also, this address is saved as the value of the convenience variable $_ (see Convenience Variables).

disassemble

disassemble /m

disassemble /s

disassemble /r

This specialized command dumps a range of memory as machine instructions. It can also print mixed source+disassembly by specifying the /m or /s modifier and print the raw instructions in hex as well as in symbolic form by specifying the /r modifier. The default memory range is the function surrounding the program counter of the selected frame. A single argument to this command is a program counter value; GDB dumps the function surrounding this value. When two arguments are given, they should be separated by a comma, possibly surrounded by whitespace. The arguments specify a range of addresses to dump, in one of two forms:

start,end

the addresses from start (inclusive) to end (exclusive)

start,+length

the addresses from start (inclusive) to start+length (exclusive).

When 2 arguments are specified, the name of the function is also printed (since there could be several functions in the given range).

The argument(s) can be any expression yielding a numeric value, such as ‘0x32c4’, ‘&main+10’ or ‘$pc - 8’.

If the range of memory being disassembled contains current program counter, the instruction at that location is shown with a => marker.

The following example shows the disassembly of a range of addresses of HP PA-RISC 2.0 code:

Here is an example showing mixed source+assembly for Intel x86 with /m or /s, when the program is stopped just after function prologue in a non-optimized function with no inline code.

The /m option is deprecated as its output is not useful when there is either inlined code or re-ordered code. The /s option is the preferred choice. Here is an example for AMD x86-64 showing the difference between /m output and /s output. This example has one inline function defined in a header file, and the code is compiled with ‘-O2’ optimization. Note how the /m output is missing the disassembly of several instructions that are present in the /s output.

foo.h:

foo.c:

Here is another example showing raw instructions in hex for AMD x86-64,

Addresses cannot be specified as a location (see Specify Location). So, for example, if you want to disassemble function bar in file foo.c, you must type ‘disassemble 'foo.c'::bar’ and not ‘disassemble foo.c:bar’.

Some architectures have more than one commonly-used set of instruction mnemonics or other syntax.

For programs that were dynamically linked and use shared libraries, instructions that call functions or branch to locations in the shared libraries might show a seemingly bogus location—it’s actually a location of the relocation table. On some architectures, GDB might be able to resolve these to actual function names.

set disassembly-flavor instruction-set

Select the instruction set to use when disassembling the program via the disassemble or x/i commands.

Currently this command is only defined for the Intel x86 family. You can set instruction-set to either intel or att. The default is att, the AT&T flavor used by default by Unix assemblers for x86-based targets.

show disassembly-flavor

Show the current setting of the disassembly flavor.

set disassemble-next-line

show disassemble-next-line

Control whether or not GDB will disassemble the next source line or instruction when execution stops. If ON, GDB will display disassembly of the next source line when execution of the program being debugged stops. This is in addition to displaying the source line itself, which GDB always does if possible. If the next source line cannot be displayed for some reason (e.g., if GDB cannot find the source file, or there’s no line info in the debug info), GDB will display disassembly of the next instruction instead of showing the next source line. If AUTO, GDB will display disassembly of next instruction only if the source line cannot be displayed. This setting causes GDB to display some feedback when you step through a function with no line info or whose source file is unavailable. The default is OFF, which means never display the disassembly of the next line or instruction.

I hope it will solve your problem.