Orar semigroup #2

Orar semigroup #2

[PLA] 17 octombrie - Lab 3

Ex1 - Expresia EAX = 7EAX - 2EBX - EBX/8 folosind instrucţiuni de deplasare

.386
.model flat, stdcall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;includem msvcrt.lib, si declaram ce functii vrem sa importam
includelib msvcrt.lib
extern exit: proc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;declaram simbolul start ca public - de acolo incepe executia
public start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;sectiunile programului, date, respectiv cod
.data

.code
start:
    ;initializez pe eax si ebx cu valori oarecare
    mov eax, 2
    mov ebx, 12
   
    ;pastrez vechea valoare a lui eax in edx
    mov edx, eax

    ;eax*7 = eax*8 - aex
    ;eax*8 = eax << 3 (eax deplasat aritmetic la stanga cu 3 pozitii)
    mov ecx, 3
    sal eax, cl
   
    ;eax=eax*7
    sub eax, edx
   
    ;pastrez vechea valoare a lui ebx in edx
    mov edx, ebx
   
    ;ebx*2
    sal ebx, 1

    ;eax = eax-ebx*2
    sub eax, ebx
   
    mov ebx, edx
    ;ebx/8 = ebx >> 3 (deplasare la dreapta cu 3 pozitii)
    sar ebx, cl
   
    sub eax, ebx
   
    ;apel functie exit
    push 0
    call exit
end start
Problemă propusă. Expresia EAX = 7EAX - 2EBX - EBX/8 folosind instrucţiuni aritmetice
.386
.model flat, stdcall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;includem msvcrt.lib, si declaram ce functii vrem sa importam
includelib msvcrt.lib
extern exit: proc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;declaram simbolul start ca public - de acolo incepe executia
public start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;sectiunile programului, date, respectiv cod
.data

.code
start:
    ;initializez pe eax si ebx cu valori oarecare
    mov eax, 2
    mov ebx, 12
   
mov cl,7
mul cl
mov edx,eax
mov eax,ebx
mov cl,2
mul cl
sub edx,eax
mov eax,ebx
mov cl,8
div cl
sub edx,eax
mov eax,edx
   
    ;apel functie exit
    push 0
    call exit
end start
Ex2 - Să se scrie un program în LA care generează un întreg reprezentabil pe octet şi îl pune în locaţia de memorie rez după formula: rez=AL*num1 + num2*AL + BL. rez, num1 şi num 2 sunt valori reprezentate pe octet, aflate în memorie
.386
.model flat, stdcall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;includem msvcrt.lib, si declaram ce functii vrem sa importam
includelib msvcrt.lib
extern exit: proc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;declaram simbolul start ca public - de acolo incepe executia
public start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;sectiunile programului, date, respectiv cod
.data
NUM1 DB 10
NUM2 DB 5
REZ DB 0

.code
start:
    ;initializam pe eax cu 0
    mov eax, 0
   
    ;in al si bl punem niste valori oarecare
    mov al, 2
    mov bl, 4
   
    ;pastram vechea valoare a lui al pe stiva
    push eax
   
    mov ecx, 0
    mov cl, NUM2
    ;al*NUM2
    mul cl
       
    add REZ, bl
    add REZ, al
   
    ;luam de pe stiva vechea valoare a lui al
    pop eax
    mov cl, NUM1
    ;al*NUM1
    mul cl
   
    add REZ, al
    mov dl,rez
   
    ;apel functie exit
    push 0
    call exit
end start
Varianta II. Ex2 - Să se scrie un program în LA care generează un întreg reprezentabil pe octet şi îl pune în locaţia de memorie rez după formula: rez=AL*num1 + num2*AL + BL. rez, num1 şi num 2 sunt valori reprezentate pe octet, aflate în memorie.
.386
.model flat,stdcall
includelib msvcrt.lib
extern exit:proc
public start
.data
NUM1 DB 10
NUM2 DB 5
REZ DB 0
.code
start:
mov eax,0
mov al,2
mov bl,4
mov ecx,eax
mul num1
mov rez,al
mov eax,ecx
mul num2
add rez,al
add rez,bl
mov dl,rez
push 0
call exit
end start
Problemă propusă. Să se scrie un program în LA care generează un întreg reprezentabil pe cuvânt şi îl pune în locaţia de memorie rez după formula: rez = AX * num1 + num2 * (AX + BX). rez, num1, num2 sunt valori reprezentate pe cuvânt, aflate în memorie.
.386
.model flat,stdcall
includelib msvcrt.lib
extern exit:proc
public start
.data
rez dw 0
num1 dw 10
num2 dw 5
.code
start:
mov ax,2
mov bx,4
mov cx,ax
mul num1
mov rez,ax
add cx,bx
mov ax,cx
mul num2
add rez,ax
mov dx,rez
push 0
call exit
end start
 

vineri, 17 octombrie 2014 by DlMuresan
Categories: | Leave a comment

Leave a Reply