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: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76:
| ;Praktikum 9; Multiplikation von 2 Zahlen mit mit Schiebeoperationen .MODEL SMALL .STACK 100h .DATA zahl1 DB 16d zahl2 DB 75d ergeb DW 0d text DB 'Das Ergebnis ist ' zahl DB 4 DUP(0), 'h', 10, 13, '$' .CODE Start: mov ax, @data mov ds, ax mov bh, 0h ;Zahl 1 nach BX mov bl, zahl1 mov cl, 0h ;Counter in CL beginnt bei 0 M1: ;while cx < 8 do begin shr bx, 1h jc M_Add M_Back: inc cl ;Counter hochzählen cmp cl, 8h jnz M1 ;Sprung wenn nciht 0 ;end ;Ausgabe von ergeb mov ax, ergeb ;Ergebnis laden mov cx, 4h ;Counter initialisieren M_ausgabe: mov bl, 10h ;bl mit 10hex laden div bl ;ax durch bl teilen cmp ah, 9h ;ah mit 9 vergleichen js M_Ziff ;Sprung wenn Vorzeichen (Ziffer 0-9) jns M_Char ;Sprung wenn kein Vorzeichen (Zeichen A-F) M_back_2: dec cx ;cx runterzählen mov di, cx ;cx in di add di, OFFSET zahl ;Adresse von zahl dazu (für ind. Addressierung) mov [di], ah ;ah in Speicher schreiben mov ah, 0h ;ah leeren sub cx, 0h ;flags zurücksetzen jnz M_ausgabe ;Sprung wenn nicht 0 ;Text ausgeben mov dx, OFFSET text mov ah, 09h int 21h ;Beenden mov ah, 4Ch int 21h M_Add: mov ax, ergeb ;Ergebnis laden mov dh, 0h ;Zahl 2 in DX mov dl, zahl2 shl dx, cl ;Schieben add ax, dx ;neuen Teil zum Ergebnis addieren mov ergeb, ax ;Ergebnis wieder speichern jmp M_back ;Rücksprung M_Ziff: add ah, 30h ;in ASCII-Code umwandeln jmp M_back_2 ;Rücksprung
M_Char: add ah, 37h ;in ASCII-Code umwandeln jmp M_back_2 ;Rücksprung END start |