Har kört fast i denna enkla uppgift som går ut på att addera två heltal mellan 0 och 9. Det är 80x86 processorn som det handlar om.
TITLE
;************************************************
;Adderar ihop två tal till en summa
;************************************************
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
CR EQU 0dh
LF EQU 0ah
CRLF DB 13,10,"$"
Ledtext1 DB "Skriv f",148,"rsta talet: ","$"
Ledtext2 DB "Skriv andra talet: ","$"
Ledtext3 DB "Summan av talen: ","$"
Ledtext4 DB "Fel v",132,"rde",13,10,"$"
X1 DB ?
X2 DB ?
.CODE
.STARTUP
;Läs in ett tecken
;TAL1
;Skriv ledtext
mov dx,offset Ledtext1
mov ah,9
int 21h
;
Las:
mov ah,1
int 21h
;
mov ah,0
cmp al,30h
jl feltal
;
cmp al,39h
jg feltal
;
sub al,30h
;
mov X1,al
hit: mov ah,1
int 21h
cmp al,CR
jne hit
; Radbyte på skärmen
mov dx,offset CRLF
mov ah,9
int 21h
;TAL2
;Skriv ledtext
mov dx,offset Ledtext2
mov ah,9
int 21h
;
Las2:
mov ah,1
int 21h
;
mov ah,0
cmp al,30h
jb feltal
;
mov ah,0
cmp al,39h
ja feltal
;
sub al,30h
;
mov X2,al
dit: mov ah,1
int 21h
cmp al,CR
jne dit
;
;Radbyte på skärmen
mov dx,offset CRLF
mov ah,9
int 21h
;Skriv ledtext för utskrift av summan
mov dx,offset Ledtext3
mov ah,9
int 21h
;Addera ihop talen
clc ;Nollställer Carryflaggan
mov al,X1
adc al,X2
jc ental
;Sätta tiotalet i AH och entalet i AL
mov bl,10
sub ah,ah
; mov al,0
div bl
;Utskrivning ifall talet är större än 10
cmp ah,1
jne ental
add ah,30h
mov dl,ah
mov ah,2
int 21h
ental:
;Skriv ut summan
add al,30h
mov dl,al
mov ah,2
int 21h
jmp Avsluta
;
;
feltal:
; Radbyte på skärmen
mov dx,offset CRLF
mov ah,9
int 21h
;
mov dx,offset Ledtext4
mov ah,9
int 21h
;Avslutar programmet
Avsluta:
.EXIT
END