Red de conocimiento informático - Conocimiento sistemático - Programación con suma firmada en lenguaje ensamblador

Programación con suma firmada en lenguaje ensamblador

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

;; nombre del programa: calculando con byte firmado ;;

;; fecha: 08.10.27 ;;

;; autor: ivshe ;;

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

.model small

.data

;byte firmado que va de -128 a +127 (incluido resultados!!)

datax db -2 ;(e4H)

datay db 64 ;(0cH)

errmsg db 0dh,0ah,'Entrada incorrecta. Salir.', '$'

ofmsg db 0dh,0ah,'Overflow.Salir.','$'

hextable db 30h,31h,32h,33h,34h,35h ,36h,37h ,38h,39h,41h,42h,43h,44h,45h,46h

.code

.startup

;ingrese el operador en AL

;+=2bH,-=2dH,*=2aH,/=2fH

mov ah,1h

int 21h

;juzga qué operación está seleccionada

cmp al,2bh

je _add

cmp al,2dh

je _sub

cmp al,2ah

je _mul

cmp al,2fh

je _div

mov ah,9h

mov dx,offset errmsg ;entrada incorrecta

int 21h

salida jmp

_add:

mov ax, 0h

mov bx,0h

mov al,datax

mov bl,datay

agregar al,bl

jo _overflow

llamar a disp

salir jmp

_sub:

mov ax,0h

mov bx,0h

mov al,datax

mov bl,datay

sub al,bl

jo _overflow

llamar a disp

salir jmp

_mul:

mov ax,0h

mov bx,0h<

/p>

mov al,datax

mov bl,datay

imul bl

;jo _overflow

call disp

salida jmp

_div:

mov ax,0ff00h ; firma la extensión aquí

mov bx,0h

mov al,datax

mov bl,datay

idiv bl

llamar a disp

salir jmp

_overflow :

mov dx,offset ofmsg

mov ah,9h

int 21h

jmp exit

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

disp proc

;; nombre del procedimiento:disp

;; función: muestra un byte en forma hexadecimal

;; entrada: al=byte de datos

;; salida: n/a

push cx

empujar bx

mov bx, tabla hexadecimal de compensación

empujar hacha

mov ah,2h

mov dl ,2ch

int 21h ;coma de salida

pop ax

mov ah,0h

mov cl,al

shl ax,4

mov al,cl

y al,0fh ; Coloque los cuatro bits superiores de AL en el cuarto bit de AH, como AL=1101 0010, conversión después

;AH=0000 1101, AL=0000 0010

xlat ;Convertir al al ascii hexadecimal correspondiente

mov cl,al

mov al,ah

xlat ; Convierte ah al ascii hexadecimal correspondiente

mov ch,al ; En este momento, CX almacena dos dígitos ASCII hexadecimal

<; p> mov dl,ch

mov ah,2h

int 21h

mov dl,cl

mov ah,2h

int 21h

pop bx

pop cx

ret

disp endp

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

salir:<

/p>

mov ax,4c00h

int 21h

end