a) Skriv et program som teller opp fra 0 til 9 på skjermen. Husk at ASCII-verdien for tegnet 0 er 30h. Bruk instruksjonene (MOV, LOOP, INT 20 og INT 21) - A100 ;Starter på adresse 100 100 MOV DL,30 ;Legger inn 30h som er hex-verdien for 0 i DL, hvilket er hvor INT21 søker når den skal skrive ut 102 MOV CX,A ;Legger inn Ah som er hex-verdien for 10 som antall ganger LOOP skal kjøre 105 MOV AH,2 ;AH settes til 2h som er en forutsetning for utskrift til skjerm 107 INT 21 ;Skriver ut en nibble til skjermen fra DL registeret 109 INC DL ;Inkrementerer DL med 1 10B LOOP 107 ;Hopper tilbake til 107 så lenge CX>0 10D INT 20 ;Avslutter - g 0123456789 Program terminated normally b) Lagre programmet i filen TELL.COM og verifiser at denne lar seg kjøre. - RBX ;Viser innholdet i BX BX 0000 : 0 ;Og gir deg muligheten til å skrive inn en ny verdi, vi setter 0 - D100 ;Viser dataene i minnet og ser hvor de slutter, dette er adressen vi skal bruke under - RCX ;Viser innholdet i CX CX 0000 : 1F ;Setter CX til 1F (11F-100=1F) (fra D100 kommandoen) - NC:tell.com ;N (name) til c: (disk) tell.com (filnavn) - w ;Skriver dataene til fila Writing 0001F bytes c) Skriv et program som tester minst signifikante bit i AH registeret. Dersom denne er 0, skriv L til skjermen, dersom den er 1, skriv H til skjermen. (Lagre programmet som AHTEST.COM) - f 100 500,0 ;Tømmer minnet for gammelt stæsj ved å skrive bare 0 - A100 100 AND AH,01 ;ANDer AH med 01 slik at det bare står igjen 1 tilslutt hvis det opprinnelig sto 1 der 103 CMP AH,01 ;Sammenlikner AH med 01h som er hex for 0000 0001b, hvis AH=01 settes ZERO-flagget høyt 106 JZ 110 ;Hvis ZERO-flagget er høyt, hopp til 110 108 MOV AH,2 ;AH settes til 2 for å kunne skrive ut til skjermen 10A MOV DL,4C ;Legger 4Ch som er ASCIIverdien for L inn i DL 10C INT 21 ;Skriver ut innholdet av DL, her L da siste bit er 1 10E INT 20 ;Avslutter 110 MOV AH,2 112 MOV DL,48 ;Legger 48h som er ASCIIverdien for H inn i DL 114 INT 21 116 INT 20 Ved lagring brukte jeg CX=18 som størrelse på programmet i AX=0100h er det _01_00 som er interessant med tanke på AH, og da det siste nummeret her som avgjør om LSB er 1 eller 0 01h = 0000 0001b d) Les omtalen av INT 16 i læreboken , s 229. Skriv et program som tar inn små bokstaver og skriver dem ut igjen til skjermen som store. Programmet skal avsluttes mår man taster ! (utropstegn) (Hint: Husk sammenhengen mellom ASCII-koder for små og store bokstaver.) 100 MOV AH,00 ;Setter AH = 00h som betyr at vi vil lese inn en character fra tastaturet med int 16h 102 INT 16 ;Leser inn characteren og legger ASCII-verdien i AL-registeret 104 CMP AL,21 ;Sjekker om den innleste characteren er lik 21h som er verdien for "!", hvilket vi her bruker som avslutt 106 JZ 0112 ;Hvis AL = ! settes ZERO-flagget høyt og JZ utføres, her hopper vi til 112 som avslutter programmet 108 SUB AL,20 ;Hvis AL != ! trekker vi fra 20h som gjør at ASCII-tegnet blir uppercase, sjekk tabellen i boka s247 10A MOV DL,AL ;Legger verdien av AL inn i DL som er registeret som blir brukt ved utskrift til skjerm 10C MOV AH,02 ;Setter AH lik 02 som er verdien som må til for å kunne skrive ut til skjermen med int 21 10E INT 21 ;Skriver ut ASCII-tegnet som har hex-verdien lagret i DL 110 JMP 0100 ;Hopper så tilbake til programets start for å gjøre det samme igjen 112 INT 20 ;Avslutter programmet