Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Write an assembly code that automatically adds 10 to the input. If the input is 123 the result will be 133. If the input is

Write an assembly code that automatically adds 10 to the input. If the input is 123 the result will be 133. If the input is -123 the result will be -113 Because -123 + 10 = -113. If the input has a string the input will stay the same. For example the input is -1A the result will be -1A. If the input is ABC the result will be ABC.

Modify this following program to do what was mentioned above:

.MODEL SMALL

.STACK

.DATA

NEWLINE db 0Dh, 0Ah, '$'

PROMPT db "Entre una cadena de caracteres: ",'$'

CHARACTER db ?

STRING db 81 dup('$')

MAX_LEN equ 80

CARRIAGE_RETURN equ 0Dh

LINE_FEED equ 0Ah

IS_VALID db ?

UNSIGNED_INT dw ? SIGNO db ?

TRUE equ 1h

FALSE equ 0h

.CODE

MAIN PROC

mov ax, @DATA

mov ds, ax

call NEW_LINE

call SHOW_PROMPT

call ASK_STRING

call NEW_LINE

call NEW_LINE

call SHOW_STRING

call IS_UNSIGNED_INT

cmp byte ptr IS_VALID, FALSE

jz GO_NEXT

call STRING_TO_UNSIGNED_INT

add word ptr UNSIGNED_INT, 10

call UNSIGNED_INT_TO_STRING

GO_NEXT:

call SHOW_STRING

call NEW_LINE

call NEW_LINE

mov ax, 4c00h ; exit program

int 21h ; return AL

RET

MAIN ENDP

;***********************************************************************************

UNSIGNED_INT_TO_STRING PROC

mov ax, UNSIGNED_INT

mov bx, 10

mov di, 0h

ANOTHER:

mov dx, 0h

div bx

add dl, '0'

mov STRING[di], dl

inc di

cmp ax, 0h

jnz ANOTHER

mov STRING[di], '$'

dec di

mov si, 0

OTHER:

mov ch, STRING[di]

mov cl, STRING[si]

mov STRING[di], cl

mov STRING[si], ch

dec di

inc si

cmp si, di

jb OTHER

RET

UNSIGNED_INT_TO_STRING ENDP

;***********************************************************************************

STRING_TO_UNSIGNED_INT PROC

mov ax, 0h

mov cx, 0h

mov bx, 10

mov di, 0h

mov cl, STRING[di]

mov byte ptr SIGNO,1h cmp cl, '-' jnz NEXT_CHAR mov byte ptr SIGNO,-1 cmp cl, '+' jnz NEXT_CHAR inc di mov cl, STRING[di]

BACK:

cmp cl, '$'

jz CONVERTED

mul bx

sub cl, '0'

add ax, cx

inc di

mov cl, STRING[di]

jmp BACK

CONVERTED: mul SIGNO

mov UNSIGNED_INT, ax

RET

STRING_TO_UNSIGNED_INT ENDP

;***********************************************************************************

mov byte ptr SIGNO,1h cmp ah, '-' jnz NEXT_CHAR mov byte ptr SIGNO,-1 cmp ah, '+' jnz NEXT_CHAR inc di mov ah, STRING[di]

IS_UNSIGNED_INT PROC

mov byte ptr IS_VALID, TRUE

mov di, 0h

mov ah, STRING[di]

NEXT_CHAR:

cmp ah, '$'

jz DECIDIR

cmp ah, '0'

jb DECIDIR

cmp ah, '9'

ja DECIDIR

inc di

mov ah, STRING[di]

jmp NEXT_CHAR

DECIDIR:

jnz NOT_VALID

cmp di, 0h

jnz KEEP

NOT_VALID:

mov byte ptr IS_VALID, FALSE

KEEP:

RET

IS_UNSIGNED_INT ENDP

;***********************************************************************************

SHOW_PROMPT PROC

mov dx, offset PROMPT ; write all characters

mov ah, 09h ; in the standard output

int 21h ; DX has the offset of the first character

RET ; the last character must be '$'

SHOW_PROMPT ENDP

;***********************************************************************************

SHOW_CHARACTER PROC

mov ah, 02h ; write a character to standard ouput

mov dl, CHARACTER ; DL has the character

int 21H

RET

SHOW_CHARACTER ENDP

;***********************************************************************************

ASK_CHARACTER PROC

mov ah, 08h ; read a character without echo from standard input

int 21h ; AL stores the character read

mov CHARACTER, al

RET

ASK_CHARACTER ENDP

;************************************************************************

2:52 PM NEW_LINE PROC

mov dx, offset NEWLINE ; write all characters

mov ah, 9 ; in the standard output

int 21h ; DX has the offset of the first character

RET ; the last character must be '$'

NEW_LINE ENDP

;***********************************************************************************

ASK_STRING PROC

mov di, 0h

GET_NEXT:

call ASK_CHARACTER

call SHOW_CHARACTER

mov bl, CHARACTER

cmp bl, CARRIAGE_RETURN

jz EOL

cmp di, MAX_LEN

je SKIP

mov STRING[di], bl

inc di

SKIP:

jmp GET_NEXT

EOL:

mov STRING[di], '$'

call CLEAR_KEYBOARD_BUFFER

RET

ASK_STRING ENDP

;***********************************************************************************

SHOW_STRING PROC

mov dx, offset STRING ; write all characters

mov ah, 09h ; in the standard output

int 21h ; DX has the offset of the first character

RET ; the last character must be '$'

SHOW_STRING ENDP

;***********************************************************************************

CLEAR_KEYBOARD_BUFFER PROC

mov ah, 0bh ; check standard input status

int 21h ; AL = 0 if input buffer is empty

cmp al, 0h ;

jz CLEARED ; are there no more characters in the standard input

NEXT:

call ASK_CHARACTER

mov ah, 0bh ; check standard input status

int 21h ; AL = 0 if input buffer is empty

cmp al, 0h ;

jnz NEXT ; are there more characters in the standard input

CLEARED:

RET

CLEAR_KEYBOARD_BUFFER ENDP

end MAIN

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Intelligent Information And Database Systems Asian Conference Aciids 2012 Kaohsiung Taiwan March 19 21 2012 Proceedings Part 3 Lnai 7198

Authors: Jeng-Shyang Pan ,Shyi-Ming Chen ,Ngoc-Thanh Nguyen

2012th Edition

3642284922, 978-3642284922

More Books

Students also viewed these Databases questions

Question

Be familiar with the integrative servicescape model.

Answered: 1 week ago

Question

Determine the roles of spatial layout and functionality.

Answered: 1 week ago