CSC231 Homework 7 2014
--D. Thiebaut (talk) 10:33, 11 November 2014 (EST)
Page under construction
This assignment is due on 11/18/14, at 11:55 p.m.
Contents
Preparation
- You may want to do some reading about the NEG and NOT instructions
Problem #1
- Use the 231Lib.asm library as inspiration and write a function called printInt that prints a 32-bit 2-s complement number on the screen.
- Your function should work similarly to printDec, in that the number to print is passed through eax, and not through the stack!
- Your function should not modify any of the registers, including eax.
- Your function should be made global so that a test program can call it.
- Your function can call _printDec to do some of its printing.
- Submit your function in a program called Hw7_1.asm. Make sure that your Hw7_1.asm program does not contain a _start label, otherwise the linker will be confused when it finds two global labels with the same name in your program and in the test program.
Example Test Program
section .text
extern printInt
_start:
mov eax, 0
call printInt ; prints 0
mov eax, 0xff
call printInt ; prints 255
mov eax, -1
call printInt ; prints -1
mov eax, 0xffffffff
call printInt ; prints -1
mov eax, 1
mov ebx, 0
int 0x80
Problem #2
- Write a function called printInt16 that prints a 16-bit 2's complement number on the screen.
- Your function should work similarly to printInt, but the number it prints is the number passed in ax (not eax).
- Your function should not modify any of the registers, including ax or the upper part of eax.
- Your function should be made global so that a test program can call it.
- Submit your function to Moodle in a program called Hw7_2.asm. Also, as with Program 1, make sure that your Hw7_2.asm program does not contain a _start label.
Example Test Program
section .text
extern printInt16
_start:
mov ax, 0
call printInt16 ; prints 0
mov ax, 0xff
call printInt16 ; prints 255
mov eax, 0x0000ffff
call printInt16 ; prints -1
mov eax, 0xffff0001
call printInt16 ; prints 1
mov eax, 1
mov ebx, 0
int 0x80
Problem #3
Please answer the multiple-choice questions in Moodle, Section Homework 7 Problem 3.
Problem #4
- Use emacs to create a file that you will call hw7.cpp
- Store the following C++ program in this file:
#include <iostream>
using namespace std;
main() {
unsigned int x, lastx;
// print 4 blank lines
cout << endl << endl << endl << endl;
// initialize x and show its first value
x = 3;
cout << "x = " << x << endl;
// loop for-ever...
while ( 1 ) {
lastx = x;
x = x * 2;
// if the value of x is ever less than or equal to lastx, stop the loop
if ( x <= lastx ) {
cout << "last x = " << lastx << endl;
cout << "x = " << x << endl;
break;
}
}
cout << endl << endl << endl << endl;
}
- Compile the program as follows:
g++ hw7.cpp -o hw7
- Run the program as follows:
./hw7
The following questions should be answered in Moodle, Section Homework 7, Problem 4.
- Question 1
- Why does the loop stop?
- Question 2
- How many bits does C++ use to store integers (the variable x)?
- Question 3
- Remove the word unsigned in front of int, compile and run the program again. Why does the loop stop?
- Question 4
- Change the words "unsigned int" and replace them by "char". Compile and run the program again. How many bits are used by C++ to store characters?
- Question 5
- Same setup as Question 4. Are characters treated as signed or unsigned in C++?