<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Asamblare - Laborator 3]]></title>
		<link>http://asm.natea.ro/</link>
		<description><![CDATA[Asamblare - http://asm.natea.ro]]></description>
		<pubDate>Thu, 29 Oct 2026 04:05:29 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Aplicatii]]></title>
			<link>http://asm.natea.ro/showthread.php?tid=5</link>
			<pubDate>Mon, 22 Oct 2018 21:49:26 +0300</pubDate>
			<guid isPermaLink="false">http://asm.natea.ro/showthread.php?tid=5</guid>
			<description><![CDATA[<span style="font-family: Consolas;" class="mycode_font">.model small<br />
.stack 100<br />
.data<br />
tabel db 1, 2, 3, 4, 5, 11 dup (?)<br />
numar1 dd 145A789Fh<br />
numar2 dd 92457ABCh<br />
<br />
numarbcd1 dw 1234h<br />
numarbcd2 dw 5678h<br />
<br />
numarbcddesp1 dw 0102h<br />
numarbcddesp2 dw 0009h<br />
<br />
asciiTable db '0123456789ABCDEF'<br />
.code<br />
<br />
; ne astepam ca in ax sa avem un numar in BCD impachetat<br />
; de exemplu 0x1234 =&gt; printam 1234<br />
afisWord proc<br />
   push cx<br />
   mov cx, 4<br />
 reiaAfis:<br />
   rol ax, 4         ; mutam cei mai semnificativi 4 biti pe ultima pozitie<br />
   call afisareCaracter<br />
   ; sau precum ati vrut: loop cx<br />
   dec cx<br />
   cmp cx, 0 <br />
   jnz reiaAfis    <br />
; rotatie completa =&gt; nu e nevoie sa salvam ax<br />
pop cx<br />
ret<br />
afisWord endp<br />
<br />
; ne astepam ca in ax sa avem un numar in BCD despachetat<br />
; de exemplu 0x0108 =&gt; printam 18<br />
afisWordDesp proc<br />
   push cx<br />
   mov cx, 2<br />
 reiaAfisWord:<br />
   rol ax, 8         ; mutam cei mai semnificativi 8 biti pe ultima pozitie <br />
   call afisareCaracter<br />
   loop reiaAfisWord<br />
   ; rotatie completa =&gt; nu e nevoie sa salvam ax<br />
   pop cx<br />
ret<br />
afisWordDesp endp<br />
<br />
afisareCaracter proc<br />
   push ax<br />
   push bx<br />
   push dx<br />
   lea bx, asciiTable<br />
   and al, 0Fh   ; folosim o masca pt a pastra doar ultimii octeti<br />
   xlat          ; luam in al caracterul ascii din asciiTable al &lt;- ds:[bx+al];<br />
   mov ah, 2h    ; dos 21h: 'Write character to STDOUT'<br />
   mov dl, al<br />
   int 21h<br />
   pop dx        ; restauram registrii<br />
   pop bx<br />
   pop ax<br />
   ret<br />
afisareCaracter endp<br />
<br />
start:<br />
   mov ax, @data<br />
   mov ds, ax<br />
<br />
   ; random<br />
   mov ax, 12h<br />
   mov bx, 0h<br />
   not ax<br />
   and bx, ax<br />
<br />
   ; aplicatia 1<br />
   mov al, 10011110b<br />
   mov cl, 3<br />
   rol al, cl<br />
<br />
   ; aplicatia 2<br />
   mov bx, sp<br />
   mov cx, 2134h<br />
   push cx<br />
   mov byte ptr ss:[bx-2], 22h<br />
   pop cx<br />
<br />
   ; aplicatia 3<br />
   mov cl, 4<br />
   mov ax, 0702h<br />
   shl al, cl<br />
   shr ax, cl<br />
<br />
   ; aplicatia 4<br />
   mov cx, 1234H<br />
   push cx<br />
   mov bx, 2359h<br />
   push bx<br />
   mov ax, 4257h<br />
   mov bp, sp<br />
   mov byte ptr [bp], al<br />
   pop ax<br />
<br />
   ; aplicatia 5<br />
   ; incarcam partea low din numere si le adunam<br />
   mov cx, word ptr numar1  <br />
   add cx, word ptr numar2      ; rezultatul adunarii pastrat in cx<br />
   <br />
   ; incarcam partea high din numere si le adunam tinand cont de cary flag<br />
   mov bx, word ptr numar1[2]<br />
   adc bx, word ptr numar2[2]   ; rezultatul adunarii pastrat in bx<br />
<br />
   ; afisam partea high, pastrata in bx<br />
   mov ax, bx<br />
   call afisWord<br />
<br />
   ; afisam partea low, pastrata in cx<br />
   mov ax, cx<br />
   call afisWord<br />
   <br />
   ; rand nou<br />
   mov ah, 2h    ; dos 21h: 'Write character to STDOUT'<br />
   mov dl, 10    ; '\r'<br />
   int 21h<br />
   mov dl, 13    ; '\n' ... sau invers<br />
   int 21h<br />
<br />
   ; aplicatia 6<br />
   mov al, byte ptr numarbcd1    ; copiem partea low in al 0x34<br />
   mov bl, byte ptr numarbcd2    ; copiem partea low in bl 0x78<br />
   add al, bl                    ; al = 0x34+0x78 = 0xAC =&gt; numar ce nu e valid in BCD<br />
   daa                           ; ajustam rezultatul =&gt; 112 =&gt; CF = 1 si al=12 <br />
   mov cl, al                    ; salvam rezultatul in cl<br />
   mov al, byte ptr numarbcd1[1] ; copiem partea high in al<br />
   mov bl, byte ptr numarbcd2[1] ; copiem partea high in bl<br />
   adc al, bl                    ; al = al + bl + CF = 0x12+0x56 + 0x1 = 0x69<br />
   daa                           ; ajustam rezultatul =&gt; 0x69<br />
   mov ch, al                    ; salvam rezultatul in ch<br />
<br />
   ; afisam numarul<br />
   mov ax, cx<br />
   call afisWord<br />
<br />
   mov ah, 4ch<br />
   int 21H<br />
end start</span>]]></description>
			<content:encoded><![CDATA[<span style="font-family: Consolas;" class="mycode_font">.model small<br />
.stack 100<br />
.data<br />
tabel db 1, 2, 3, 4, 5, 11 dup (?)<br />
numar1 dd 145A789Fh<br />
numar2 dd 92457ABCh<br />
<br />
numarbcd1 dw 1234h<br />
numarbcd2 dw 5678h<br />
<br />
numarbcddesp1 dw 0102h<br />
numarbcddesp2 dw 0009h<br />
<br />
asciiTable db '0123456789ABCDEF'<br />
.code<br />
<br />
; ne astepam ca in ax sa avem un numar in BCD impachetat<br />
; de exemplu 0x1234 =&gt; printam 1234<br />
afisWord proc<br />
   push cx<br />
   mov cx, 4<br />
 reiaAfis:<br />
   rol ax, 4         ; mutam cei mai semnificativi 4 biti pe ultima pozitie<br />
   call afisareCaracter<br />
   ; sau precum ati vrut: loop cx<br />
   dec cx<br />
   cmp cx, 0 <br />
   jnz reiaAfis    <br />
; rotatie completa =&gt; nu e nevoie sa salvam ax<br />
pop cx<br />
ret<br />
afisWord endp<br />
<br />
; ne astepam ca in ax sa avem un numar in BCD despachetat<br />
; de exemplu 0x0108 =&gt; printam 18<br />
afisWordDesp proc<br />
   push cx<br />
   mov cx, 2<br />
 reiaAfisWord:<br />
   rol ax, 8         ; mutam cei mai semnificativi 8 biti pe ultima pozitie <br />
   call afisareCaracter<br />
   loop reiaAfisWord<br />
   ; rotatie completa =&gt; nu e nevoie sa salvam ax<br />
   pop cx<br />
ret<br />
afisWordDesp endp<br />
<br />
afisareCaracter proc<br />
   push ax<br />
   push bx<br />
   push dx<br />
   lea bx, asciiTable<br />
   and al, 0Fh   ; folosim o masca pt a pastra doar ultimii octeti<br />
   xlat          ; luam in al caracterul ascii din asciiTable al &lt;- ds:[bx+al];<br />
   mov ah, 2h    ; dos 21h: 'Write character to STDOUT'<br />
   mov dl, al<br />
   int 21h<br />
   pop dx        ; restauram registrii<br />
   pop bx<br />
   pop ax<br />
   ret<br />
afisareCaracter endp<br />
<br />
start:<br />
   mov ax, @data<br />
   mov ds, ax<br />
<br />
   ; random<br />
   mov ax, 12h<br />
   mov bx, 0h<br />
   not ax<br />
   and bx, ax<br />
<br />
   ; aplicatia 1<br />
   mov al, 10011110b<br />
   mov cl, 3<br />
   rol al, cl<br />
<br />
   ; aplicatia 2<br />
   mov bx, sp<br />
   mov cx, 2134h<br />
   push cx<br />
   mov byte ptr ss:[bx-2], 22h<br />
   pop cx<br />
<br />
   ; aplicatia 3<br />
   mov cl, 4<br />
   mov ax, 0702h<br />
   shl al, cl<br />
   shr ax, cl<br />
<br />
   ; aplicatia 4<br />
   mov cx, 1234H<br />
   push cx<br />
   mov bx, 2359h<br />
   push bx<br />
   mov ax, 4257h<br />
   mov bp, sp<br />
   mov byte ptr [bp], al<br />
   pop ax<br />
<br />
   ; aplicatia 5<br />
   ; incarcam partea low din numere si le adunam<br />
   mov cx, word ptr numar1  <br />
   add cx, word ptr numar2      ; rezultatul adunarii pastrat in cx<br />
   <br />
   ; incarcam partea high din numere si le adunam tinand cont de cary flag<br />
   mov bx, word ptr numar1[2]<br />
   adc bx, word ptr numar2[2]   ; rezultatul adunarii pastrat in bx<br />
<br />
   ; afisam partea high, pastrata in bx<br />
   mov ax, bx<br />
   call afisWord<br />
<br />
   ; afisam partea low, pastrata in cx<br />
   mov ax, cx<br />
   call afisWord<br />
   <br />
   ; rand nou<br />
   mov ah, 2h    ; dos 21h: 'Write character to STDOUT'<br />
   mov dl, 10    ; '\r'<br />
   int 21h<br />
   mov dl, 13    ; '\n' ... sau invers<br />
   int 21h<br />
<br />
   ; aplicatia 6<br />
   mov al, byte ptr numarbcd1    ; copiem partea low in al 0x34<br />
   mov bl, byte ptr numarbcd2    ; copiem partea low in bl 0x78<br />
   add al, bl                    ; al = 0x34+0x78 = 0xAC =&gt; numar ce nu e valid in BCD<br />
   daa                           ; ajustam rezultatul =&gt; 112 =&gt; CF = 1 si al=12 <br />
   mov cl, al                    ; salvam rezultatul in cl<br />
   mov al, byte ptr numarbcd1[1] ; copiem partea high in al<br />
   mov bl, byte ptr numarbcd2[1] ; copiem partea high in bl<br />
   adc al, bl                    ; al = al + bl + CF = 0x12+0x56 + 0x1 = 0x69<br />
   daa                           ; ajustam rezultatul =&gt; 0x69<br />
   mov ch, al                    ; salvam rezultatul in ch<br />
<br />
   ; afisam numarul<br />
   mov ax, cx<br />
   call afisWord<br />
<br />
   mov ah, 4ch<br />
   int 21H<br />
end start</span>]]></content:encoded>
		</item>
	</channel>
</rss>