Difference between revisions of "CSC231 Bash Tutorial 5"

From dftwiki3
Jump to: navigation, search
(Created page with "--~~~~ ---- =Testing Instructions= <br />")
 
Line 3: Line 3:
  
 
=Testing Instructions=
 
=Testing Instructions=
 +
<br />
 +
Writing a short assembly program to answer quick questions is simple and can be quick.  We'll do a couple examples.
 +
<br />
 +
==Testing how DIV works==
 +
<br />
 +
* Get a copy of '''test_skel.asm'''
 +
 +
getcopy test_skel.asm
 +
 +
* Its code is shown below for completeness:
 +
::<source lang="asm">
 +
;;; Testing sandbox
 +
        extern  _printDec
 +
        extern  _printString
 +
        extern  _println
 +
        extern  _getInput
 +
extern _printRegs
 +
 +
section .data
 +
a dd 100
 +
b dd 33
 +
c dd 0
 +
ans dd 0
 +
 +
section .text
 +
global _start
 +
_start: ;-------------------------------------------------
 +
 +
 +
;;; exit -------------------------------------------------
 +
mov ebx, 0
 +
mov eax, 1
 +
int    0x80
 +
</source>
 +
<br />
 +
* It has everything needed to test how short pieces of code work.
 +
* Put the following code between the dashed lines:
 +
<br />
 +
::<source lang="asm">
 +
mov edx, 0
 +
mov eax, dword[a]
 +
div dword[b]
 +
 +
call _printRegs
 +
</source>
 +
* (If the lines are already there, but commented out, just remove the semi-colons.)
 +
* See what the program does.  What quantity will be divided by what other quantity.
 +
* Assembly, link and run:
 +
 +
  nasm -f elf test_skel.asm
 +
  ld -melf_i386 -o test_skel test_skel.o 231Lib.o
 +
  ./test_skel
 +
 +
* Do you see the quotient and remainder in the registers?  Does it make sense?
 +
<br />
 +
<tanbox>
 +
You should practice doing this simple exercise every time you are not sure about a particular set of instructions.  If you start with a skeleton program, such as '''test_skel.asm''', all you have to do is fill in the middle part, assemble, link and run, and you will have your answer.
 +
<br />
 +
==Hex, Binary, and 2's Complement==
 +
<br />
 +
* You can use the same method for testing number representations.
 +
* Go to this URL [http://www.nasm.us/doc/nasmdoc3.html http://www.nasm.us/doc/nasmdoc3.html], and locate '''Section 3.4.1'''.  Look at the instructions and the different ways '''Nasm''' accepts ''literals.''
 +
* Nasm accepts numbers in decimal, hex, binary, octal, and 2's complements.
 +
* Let's try a few:
 +
* Edit your '''test_skel.asm''' program and add the following lines between the dashed lines:
 +
<br />
 +
::<source lang="asm">
 +
 +
mov eax, 0x0000FFFF
 +
mov ebx, 00000000111111110000000011111111b
 +
mov ecx, 1111_1111_1111_1111_1111_1111_1111_1111b
 +
call _printRegs
 +
 +
 +
</source>
 
<br />
 
<br />

Revision as of 08:19, 3 March 2017

--D. Thiebaut (talk) 08:04, 3 March 2017 (EST)


Testing Instructions


Writing a short assembly program to answer quick questions is simple and can be quick. We'll do a couple examples.

Testing how DIV works


  • Get a copy of test_skel.asm
getcopy test_skel.asm

  • Its code is shown below for completeness:
;;; Testing sandbox
	        extern  _printDec
	        extern  _printString
	        extern  _println
	        extern  _getInput
		extern	_printRegs
	
	section	.data
a		dd	100
b		dd	33
c		dd	0
ans		dd	0
	
		section	.text
		global	_start
_start: ;-------------------------------------------------

	
;;; exit -------------------------------------------------
		mov	ebx, 0
		mov	eax, 1
		int     0x80


  • It has everything needed to test how short pieces of code work.
  • Put the following code between the dashed lines:


 		mov	edx, 0
		mov	eax, dword[a]
 		div	dword[b]
 
 		call	_printRegs
  • (If the lines are already there, but commented out, just remove the semi-colons.)
  • See what the program does. What quantity will be divided by what other quantity.
  • Assembly, link and run:
 nasm -f elf test_skel.asm
 ld -melf_i386 -o test_skel test_skel.o 231Lib.o
 ./test_skel 

  • Do you see the quotient and remainder in the registers? Does it make sense?


<tanbox> You should practice doing this simple exercise every time you are not sure about a particular set of instructions. If you start with a skeleton program, such as test_skel.asm, all you have to do is fill in the middle part, assemble, link and run, and you will have your answer.

Hex, Binary, and 2's Complement


  • You can use the same method for testing number representations.
  • Go to this URL http://www.nasm.us/doc/nasmdoc3.html, and locate Section 3.4.1. Look at the instructions and the different ways Nasm accepts literals.
  • Nasm accepts numbers in decimal, hex, binary, octal, and 2's complements.
  • Let's try a few:
  • Edit your test_skel.asm program and add the following lines between the dashed lines:


		mov	eax, 0x0000FFFF
		mov	ebx, 00000000111111110000000011111111b
		mov	ecx, 1111_1111_1111_1111_1111_1111_1111_1111b
		call	_printRegs