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 p>
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,chmov ah,2h
int 21h
mov dl,cl p>
mov ah,2h p>
int 21h
pop bx
pop cx
ret
disp endp
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;
salir:<
/p>
mov ax,4c00h
int 21h
end