6-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
JAVOB:
#include
using namespace std;
extern "C" void chop_et(const char* format, int* value);
int main() {
int x;
int y = 100;
int a = 0;
int b = 1;
if (y > 0) {
chop_et("%i", &b);
} else {
chop_et("%i", &a);
}
return 0;
}
7-masala.Quyida assembler tilida berilgan kodni ishlash natijaisni ko’rsating. Bu dastur qanday masalani hal etadi?
%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
Berilgan kodning natijasi quyidagi masalani hal etadi:
1. Dastur `.bss` bo'limida `x` nomli 4 baytli xotira rezerv qiladi.
2. `.text` bo'limida `_main` nomli global dastur boshlanadi.
3. `qabul_qil` buyrug'i orqali foydalanuvchidan bir tamsayi kiritiladi va `x` o'zgaruvchisiga saqlanadi.
4. `mov` buyrug'i orqali `x` o'zgaruvchisining qiymati `eax` registriga ko'rsatiladi.
5. `cmp` va `jge` buyruqlari orqali `eax` qiymati 0 ga teng yoki katta bo'lsa "s" belgilangan qismga o'tiladi, aks holda "tamom" belgilangan qismga o'tiladi.
6. "s" belgilangan qismda `eax` o'zgaruvchisi `chop_et` buyrug'i yordamida konsolga chiqariladi.
7. "tamom" belgilangan qismda esa `eax` o'zgaruvchisi `chop_et` buyrug'i yordamida konsolga chiqariladi.
Natijada, foydalanuvchidan kiritilgan tamsayining alohida belgilangan qismidagi ifoda natijasiga qarab konsolga chiqariladi. Agar kiritilgan son 0 ga teng yoki katta bo'lsa, "s" belgilangan qismdagi ifoda natijasiga qarab chiqariladi, aks holda "tamom" belgilangan qismdagi ifoda natijasiga qarab chiqariladi.
Dostları ilə paylaş: |