Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Sa 03.04.10 18:08
Hey,
ich sitz grad vor meinen HAs un ich komm nich ganz damit klar. Wir sollen mit Assembler die Multiplikation 5 * 74 = 370 nur mit Schiebebefehlen realisieren. Kann mir da jmd den Ansatz bzw. die Vorgangsweiße erklären? Die Implementierung sollte ich dann selbst hin bekommen.
MfG & Thx Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
norman2306
      
Beiträge: 222
Erhaltene Danke: 16
Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
|
Verfasst: Sa 03.04.10 18:52
Machen wir das mal mit einer 4bit-Zahl
also:
Quelltext 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:
| z1 z2 00001010 * 0110 = ?
1. z1 << 0 * z2[0] 00001010 * 0 = 00000000;
2. z2 << 1 * z2[1] 00010100 * 1 = 00010100;
3. z2 << 2 * z2[2] 00101000 * 1 = 00101000;
4. z2 << 3 * z2[3] 01010000 * 0 = 00000000;
//Und dann noch zusammenzählen: &1 00000000 &2 00010100 &3 00101000 &4 00000000
Res 00111100 |
>> ist der shift-operator in c#
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Sa 03.04.10 19:01
Ahh, alles klar, Danke!
€: So ich habs fertig. Für die, die es interessiert hier der 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: 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 |
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: So 04.04.10 19:35
_________________ Salus populi suprema lex esto
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 05.04.10 17:03
Öh, mein Kopf?!
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|