asked 163k views
1 vote
Assembly code

Write a function (decode) to clean the data in a variable (one byte long) from '0'. The variable address is placed in ECX

Write a function (encode) to 'ADD' an ascii 0 to a variable. The variable address is placed in ECX

Helpful code

;nasm 2.13.02

section .data
section .bss
number: resb 1;

section .text
global _start

_start:

;;; main
mov al,5;
mov [number],al
; encode number
; print number
; decode number
; add 1 to number
; encode number
; print number

jmp end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; encode adds '0' to the variable in ECX
Encode:
ADD [ECX],byte '0'
ret

Decode:
SUB [ECX],byte '0'
ret


Read:
mov eax,3
mov ebx,0
int 80h
ret

Print:
mov eax,4
mov ebx,1
int 80h
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
end:
mov eax,1
mov ebx,0
int 80h;

asked
User Ziyuan
by
7.6k points

1 Answer

3 votes

Answer:

;nasm 2.13.02

section .data

section .bss

number: resb 1;

section .text

global _start

_start:

;;; main

mov al,5;

mov [number],al

; encode number

mov ecx,number

call Encode

; print number

mov ecx,number

call Print

; decode number

mov ecx,number

call Decode

; add 1 to number

inc byte [number]

; encode number

mov ecx,number

call Encode

; print number

mov ecx,number

call Print

jmp end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; encode adds '0' to the variable in ECX

Encode:

ADD BYTE [ECX],'0'

ret

Decode:

SUB BYTE [ECX],'0'

ret

Read:

mov eax,3

mov ebx,0

int 80h

ret

Print:

mov eax,4

mov ebx,1

mov ecx,number

mov edx,1

int 80h

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

end:

mov eax,1

mov ebx,0

int 80h;

Step-by-step explanation:

In the main program, we first set the value of number to 5 using mov al,5 and mov [number],al. Then, we call the Encode function to add the character '0' to number. Next, we call the Print function to print the value of number on the console. After that, we call the Decode function to remove the character '0' from number. Then, we increment the value of number by 1 using inc byte [number]. Finally, we call the Encode function again to add the character '0' to number, and then call the Print function to print the updated value of number on the console.

The Encode function takes the variable address as an argument in ECX, and adds the character '0' to the variable using ADD BYTE [ECX],'0'.

The Decode function also takes the variable address as an argument in ECX, and subtracts the character '0' from the variable using SUB BYTE [ECX],'0'.

The Print function uses the mov ecx,number instruction to load the address of number into ECX, and then prints the byte value at that address using the int 80h instruction.

answered
User Felwithe
by
8.5k points