Difference between revisions of "CSC231 Homework Solutions 2017"
(→hw1.asm) |
|||
Line 132: | Line 132: | ||
</source> | </source> | ||
+ | <br /> | ||
+ | =hw2.asm= | ||
+ | <br /> | ||
+ | ::<source lang="asm"> | ||
+ | ;;; ; ; hw2sol.asm | ||
+ | ;;; ; ; D. Thiebaut | ||
+ | ;;; ; ; | ||
+ | ;;; ; ; | ||
+ | |||
+ | |||
+ | extern _printDec | ||
+ | extern _printString | ||
+ | extern _println | ||
+ | extern _getInput | ||
+ | |||
+ | section .data | ||
+ | prompt db "> " | ||
+ | promptLen equ $-prompt | ||
+ | ansStr db "ans = " | ||
+ | ansStrLen equ $-ansStr | ||
+ | |||
+ | a dd 0 | ||
+ | b dd 0 | ||
+ | c dd 0 | ||
+ | ans dd 0 | ||
+ | |||
+ | section .text | ||
+ | global _start | ||
+ | _start: | ||
+ | ;; display prompt | ||
+ | mov ecx, prompt | ||
+ | mov edx, promptLen | ||
+ | call _printString | ||
+ | ;; get a | ||
+ | call _getInput | ||
+ | mov dword[a], eax | ||
+ | |||
+ | ;; display prompt | ||
+ | mov ecx, prompt | ||
+ | mov edx, promptLen | ||
+ | call _printString | ||
+ | ;; get b | ||
+ | call _getInput | ||
+ | mov dword[b], eax | ||
+ | |||
+ | ;; display prompt | ||
+ | mov ecx, prompt | ||
+ | mov edx, promptLen | ||
+ | call _printString | ||
+ | ;; get c | ||
+ | call _getInput | ||
+ | mov dword[c], eax | ||
+ | |||
+ | ;; ----------------------------------- | ||
+ | ;; computation: ans = 2*(a-b) + 3*c | ||
+ | ;; ----------------------------------- | ||
+ | |||
+ | ; your code will go here... | ||
+ | |||
+ | |||
+ | ;; ----------------------------------- | ||
+ | ;; display "ans =" | ||
+ | ;; ----------------------------------- | ||
+ | mov ecx, ansStr | ||
+ | mov edx, ansStrLen | ||
+ | call _printString | ||
+ | |||
+ | ;; ----------------------------------- | ||
+ | ;; display ans variable | ||
+ | ;; ----------------------------------- | ||
+ | mov eax, dword[ans] | ||
+ | call _printDec | ||
+ | call _println | ||
+ | call _println | ||
+ | |||
+ | ;;; exit | ||
+ | mov ebx, 0 | ||
+ | mov eax, 1 | ||
+ | int 0x80 | ||
+ | |||
+ | </source> | ||
+ | <br /> |
Revision as of 16:59, 22 April 2017
--D. Thiebaut (talk) 17:57, 22 April 2017 (EDT)
Problem 1
;;; mystery.asm ;;; D. Thiebaut ;;; ;;; To assemble, link, and run: ;;; nasm -f elf mystery.asm ;;; ld -melf_i386 -o mystery mystery.o ;;; ./mystery ;;; section .data Hello db "Hello there!", 10, 10 HelloLen equ $-Hello section .text global _start _start: ;;; print Hello and a space after it mov eax, 4 ; write mov ebx, 1 ; stdout mov ecx, Hello ; address of message to print mov edx, 6 ; print only 6 chars int 0x80 ;;; print ! and two line feed chars mov eax, 4 ; write mov ebx, 1 ; stdout mov ecx, Hello+11 ; address of ! char mov edx, 3 ; print only 3 chars int 0x80 ;;; exit mov ebx, 0 mov eax, 1 int 0x80
hw1.asm
;;; hw1.asm ;;; D. Thiebaut ;;; ;;; To assemble, link, and run: ;;; nasm -f elf hw1.asm ;;; ld -melf_i386 -o hw1 hw1.o ;;; ./hw1 ;;; section .data msg db " CSC231 Assembly " linefeed db 10 dashline db "------------------" lineLen equ $-dashline section .text global _start _start: ;;; print message mov eax, 4 ; write mov ebx, 1 ; stdout mov ecx, dashline ; address of message to print mov edx, lineLen ; # of chars to print int 0x80 mov eax, 4 ; write mov ebx, 1 ; stdout mov ecx, dashline ; address of message to print mov edx, lineLen ; # of chars to print int 0x80 mov eax, 4 ;print line-feed mov ebx, 1 mov ecx, linefeed mov edx, 1 int 0x80 mov eax, 4 ; write ---- mov ebx, 1 ; stdout mov ecx, dashline ; address of message to print mov edx, 9 ; # of chars to print int 0x80 mov eax, 4 ; write message mov ebx, 1 ; stdout mov ecx, msg ; address of message to print mov edx, lineLen ; # of chars to print int 0x80 mov eax, 4 ; write ---- mov ebx, 1 ; stdout mov ecx, dashline ; address of message to print mov edx, 9 ; # of chars to print int 0x80 mov eax, 4 ;print line-feed mov ebx, 1 mov ecx, linefeed mov edx, 1 int 0x80 mov eax, 4 ; write mov ebx, 1 ; stdout mov ecx, dashline ; address of message to print mov edx, lineLen ; # of chars to print int 0x80 mov eax, 4 ; write mov ebx, 1 ; stdout mov ecx, dashline ; address of message to print mov edx, lineLen ; # of chars to print int 0x80 mov eax, 4 ;print line-feed mov ebx, 1 mov ecx, linefeed mov edx, 1 int 0x80 ;;; exit mov ebx, 0 mov eax, 1 int 0x80
hw2.asm
;;; ; ; hw2sol.asm ;;; ; ; D. Thiebaut ;;; ; ; ;;; ; ; extern _printDec extern _printString extern _println extern _getInput section .data prompt db "> " promptLen equ $-prompt ansStr db "ans = " ansStrLen equ $-ansStr a dd 0 b dd 0 c dd 0 ans dd 0 section .text global _start _start: ;; display prompt mov ecx, prompt mov edx, promptLen call _printString ;; get a call _getInput mov dword[a], eax ;; display prompt mov ecx, prompt mov edx, promptLen call _printString ;; get b call _getInput mov dword[b], eax ;; display prompt mov ecx, prompt mov edx, promptLen call _printString ;; get c call _getInput mov dword[c], eax ;; ----------------------------------- ;; computation: ans = 2*(a-b) + 3*c ;; ----------------------------------- ; your code will go here... ;; ----------------------------------- ;; display "ans =" ;; ----------------------------------- mov ecx, ansStr mov edx, ansStrLen call _printString ;; ----------------------------------- ;; display ans variable ;; ----------------------------------- mov eax, dword[ans] call _printDec call _println call _println ;;; exit mov ebx, 0 mov eax, 1 int 0x80