Ik heb voor school een opdracht gekregen om assembly een programma te schrijven waarin een regel van 15 karakters op alfabetische volgorde geplaatst wordt. Het programma dient geschreven te worden in een tekstbestand (notepad oid) en met Turbo Assembler (TASM en TLINK) gecompileerd te worden en in Turbo Debugger uitgevoerd (om te demonstreren dat het werkt).
Nu hoop ik dat iemand mij hier een beetje op weg kan helpen. Ik heb al eens een programmaatje geschreven dat namen van vier letters op alfabetische volgorde kan zetten. Ik weet alleen niet hoe ik een regel van 15 karakters kan invoeren.
Kan iemand aanwijzingen geven hoe het volgende programma aangepast zou kunnen worden om een regel van 15 karakters te alfabetiseren??
Nu hoop ik dat iemand mij hier een beetje op weg kan helpen. Ik heb al eens een programmaatje geschreven dat namen van vier letters op alfabetische volgorde kan zetten. Ik weet alleen niet hoe ik een regel van 15 karakters kan invoeren.
Kan iemand aanwijzingen geven hoe het volgende programma aangepast zou kunnen worden om een regel van 15 karakters te alfabetiseren??
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| .MODEL small ;
.STACK 100h ;
.DATA ;
Naam1 DB 'vuur' ;1e naam
Naam2 DB 'roos' ;2e naam
.CODE ;
mov ax,@data ;
mov ds,ax ;
mov bx,0000 ;Adres eerste letter in BX
;
call wissel ;Roep subroutine wissel aan
mov ah,4ch ;(Als het wisselen klaar is,
int 21h ; terug naar DOS.)
wissel: push ax ;Zet register op stack
push bx ; "
push cx ; "
mov cx,0004 ;Laad teller met aantal letters = 4
mov dx,0000 ;Initialisatie (gaat er van uit dat
; er niet gewisseld hoeft te worden)
mov [bx],ah ;Zet AH in BX
mov [bx+04],al ;Zet AL in BX+4
next: mov al,[bx] ;Laad karakterpointer 1e naam in AL
; = (BX)-ste letter van 1e naam
mov ah,[bx+04] ;Laad karakterpointer 2e naam in AL
; = (BX)-ste letter van 2e naam
cmp al,ah ;Vergelijk AL en AH
; (als AL-AH != 0, dan volgende regel)
hoger: jb next ;Volgende 2 letters vegelijken als 2e<1e
ja exec ;Wisselen als 2e>1e
inc bx ;Teller voor volgende letters verhogen
dec cx ;Teller voor het aantal letters verlagen
exec: mov dx,01 ;Zet parameter voor wisselen
jne next ;Volgende letters
jmp next ;Volgende letters vergelijken
next: pop cx ;Registers herstellen
pop bx ; met oude waarde van stack
pop ax ;
ret ;Terug naar hoofdprogramma
END ;Einde programma |
[ Voor 17% gewijzigd door Aham brahmasmi op 06-01-2003 13:22 ]