Amaliy yechish uchun masalalar
1-masala. Quyida assembler tilida berilgan dastur kodini C++ tiliga o’giring.
%include"d:\nasm-io.inc"
section .bss
x resd 1
section .data
y dd 100
a dd 0
b dd 1
section .text
global _main
_main:
mov eax,[y]
cmp eax,0
jle aa
chop_et '%i',[b]
jmp tamom
aa: chop_et '%i',[a]
tamom:
ret
2-masala.Quyida assembler tilida berilgan kodni ishlash natijaisni ko’rsating. Bu dastur qanday masalani hal etadi? (20%).
%include "d:\nasm-io.inc"
section .bss
x resd 1
section .text
global _main
_main:
qabul_qil '%i',x
mov eax,[x]
cmp eax,0
jge s
neg eax
chop_et '%i',eax
jmp tamom
s: chop_et '%i',eax
tamom:
ret
3-masala. Quyida C++ tilida dastur qismi berilgan. Shu dastur qismiga mos assembler dastur kodini keltiring (20%).
short int a=10;
int b=20,c;
c=a+b
Javoblar:
1-masala
#include
using namespace std;
int main()
{
int x=100;
cout<< (x>0)?x:0 ;
return 0;
}
2-masala
%include "nasm-io.inc"
section .bss
x resd 1
section .text
global _main
_main:
qabul_qil '%i',x
mov eax,[x]
cmp eax,0
jge s
neg eax
chop_et '%i',eax
jmp tamom
s: chop_et '%i',eax
tamom:
ret
Bu yerda: mov eax,[x]- x o’zgaruvchini eax registriga taminlanayapti, cmp eax,0 – eax regitridagi qiymatni 0 bilan solishtiryapmiz, jge s -agar x<0 sharti bajarilsa, s ga o’tadi. neg eax – eax registridagi qiymatni teskarisiga almashtiradi.Demak, shunday xulosa qilishimiz mumkinki, bu dastur taqqoslash natijasini teskari ishorasi bilan chop etadi.
3-masala
short int a=10;
int b=20,c;
c=a+b
Assembler tilida
%include "nasm-io.inc"
section .bss
a resd 4
b db 2
c db 4
section .text
global _main
_main:
chop_et 'Ikkita son kiririting:'
qabul_qil '%i %i',a,b
mov eax,[a] ;; eax=a
mov ecx,[c] ;; ecx=c
mov ebx,[b] ;; ebx=b
add ecx,[b] ;; ecx=ecx+b
add ecx,[a] ;; ecx=ecx+a
chop_et 'Natija: %i+%i=%i %i',[a],[b],c,ecx
ret0>
Dostları ilə paylaş: |