EMU8086 GENERATED LISTING. MACHINE CODE <- SOURCE. num_primi.exe -- emu8086 assembler version: 4.07 [ 23/01/2013 -- 19.39.31 ] =================================================================================================== [LINE] LOC: MACHINE CODE SOURCE =================================================================================================== [ 1] : Dati SEGMENT [ 2] 0000: 00 00 N DW ? ; numero di cui vā controllata la primalitā [ 3] 0002: 00 Primo DB ? ; esito del test - 1 primo, 0 non primo [ 4] : Dati ENDS [ 5] : [ 6] : Codice SEGMENT [ 7] : [ 8] 0010: B8 00 00 Inizio: MOV AX,Dati ; setta il segmento dati a puntare alla corretta zona [ 9] 0013: 8E D8 MOV DS,AX [ 10] : [ 11] 0015: 8B 0E 00 00 MOV CX,N ; inizializza il contatore di ciclo (da n-1 a 2) [ 12] : [ 13] 0019: 83 F9 02 CMP CX,2d ; se č 2 č primo [ 14] 001C: 74 14 JE EPrimo [ 15] : [ 16] 001E: 49 DEC CX [ 17] : [ 18] 001F: Ciclo: [ 19] 001F: A1 00 00 MOV AX,N ; pone come dividendo n (coppia DX:AX) [ 20] 0022: BA 00 00 MOV DX,0h [ 21] : [ 22] 0025: F7 F1 DIV CX ; divide il dividendo per CX [ 23] 0027: 83 FA 00 CMP DX,0h ; controlla se il resto, ossia se DX:AX e' divisibile per ECX [ 24] 002A: 74 0D JE Non_Primo ; se č divisivbile esce dal ciclo di controllo [ 25] : ; (il numero n non č primo) [ 26] : [ 27] 002C: 49 DEC CX ; effettua un nuovo test con il numero inferiore [ 28] 002D: 83 F9 01 CMP CX,1d ; se č pari a 1 esce dal ciclo di test... [ 29] 0030: 75 ED JNE Ciclo [ 30] : [ 31] 0032: EPrimo: [ 32] : ; se il programma č arrivato qui nessun divisore č stato trovato [ 33] 0032: C6 06 02 00 01 MOV Primo,1d [ 34] 0037: EB 05 JMP Fine [ 35] 0039: Non_Primo: [ 36] : ; nel caso in cui non sia primo, allora ris viene posta a 0 [ 37] 0039: C6 06 02 00 00 MOV Primo,0d [ 38] 003E: Fine: [ 39] 003E: B4 4C MOV AH,4Ch [ 40] 0040: CD 21 INT 21h [ 41] : Codice ENDS [ 42] : [ 43] : END Inizio [ 44] : =================================================================================================== EXE HEADER - bytes from 0000 to 01FF inclusive. 0000: 4D - exe signature (M) 0001: 5A - exe signature (Z) 0002: 42 - bytes on last page (l.byte) 0003: 00 - bytes on last page (h.byte) 0004: 02 - 512 byte pages in file (l.byte) 0005: 00 - 512 byte pages in file (h.byte) 0006: 01 - relocations (l.byte) 0007: 00 - relocations (h.byte) 0008: 20 - paragraphs in header (l.byte) 0009: 00 - paragraphs in header (h.byte) 000A: 00 - minimum memory (l.byte) 000B: 00 - minimum memory (h.byte) 000C: FF - maximum memory (l.byte) 000D: FF - maximum memory (h.byte) 000E: 00 - SS - stack segment (l.byte) 000F: 00 - SS - stack segment (h.byte) 0010: 00 - SP - stack pointer (l.byte) 0011: 00 - SP - stack pointer (h.byte) 0012: B3 - check sum (l.byte) 0013: 29 - check sum (h.byte) 0014: 00 - IP - instruction pointer (l.byte) 0015: 00 - IP - instruction pointer (h.byte) 0016: 01 - CS - code segment (l.byte) 0017: 00 - CS - code segment (h.byte) 0018: 1E - relocation table adress (l.byte) 0019: 00 - relocation table adress (h.byte) 001A: 00 - overlay number (l.byte) 001B: 00 - overlay number (h.byte) 001C: 01 - signature (l.byte) 001D: 00 - signature (h.byte) 001E: 01 - relocation table - offset inside segment (l.byte) 001F: 00 - relocation table - offset inside segment (h.byte) 0020: 01 - relocation table - segment anchor (l.byte) 0021: 00 - relocation table - segment anchor (h.byte) 0022 to 01FF - reserved relocation area (00) ===================================================================================================