سورس تبدیل عدد از مبنای ۱۰ به ۲ به زبان اسمبلی
در این بخش سورس تبدیل عدد از مبنای ۱۰ به ۲ به زبان اسمبلی را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی Assembly نوشته شده است. در ادامه می توانید توضیحات، تصاویر مربوط به این پروژه و فیلمی از چگونگی اجرا کردن آن را مشاهده کنید.
توضیحات پروژه
در این پروژه بعد از اجرا شدن برنامه، کاربر یک عدد در مبنای 10 (مثلا: 12345) را وارد کرده و کلید Enter را فشار می دهد، سپس برنامه عدد وارد شده را به معادل باینری یا همان مبنای 2 تبدیل کرده و در خروجی نمایش می دهد. شما با مشاهده سورس کد این پروژه می توانید نحوه کار با اعداد و تبدیل مبنا در زبان اسمبلی را یاد گرفته و دانش خود در زمینه برنامه نویسی Assembly را ارتقا دهید.
در دستگاه اعداد دو دویی (Binary) همه مقادیر با استفاده از اعداد 0 و 1 نمایش داده می شوند. کامپیوترها فقط می توانند زبان باینری را پردازش کنند و برنامه هایی که با زبان های سطح بالا مانند C#، Java و غیره نوشته شده باشند، در نهایت برای اجرا شدن به 0 و 1 تبدیل می شوند. این برنامه با استفاده از برنامه Emu8086 نوشته شده است که می توانید آن را از لینک مورد نظر دانلود کنید.
قسمت های از سورس کد
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | name "ToBin" org 100h ; skipt data area: jmp start ; ascii buffer holds 16 bits of binary equivalent: result db 16 dup('x'), 'b' start: ; print the message1: mov dx, offset msg1 mov ah, 9 int 21h call scan_num ; get the number to cx. mov bx, cx print_me: mov al, [si] int 10h ; print in teletype mode. inc si loop print_me ; wait for any key.... mov ah, 0 int 16h ret ; return to operating system. convert_to_bin proc near pusha lea di, result ; print result in binary: mov cx, 16 print: mov ah, 2 ; print function. mov [di], '0' test bx, 1000_0000_0000_0000b ; test first bit. jz zero mov [di], '1' zero: shl bx, 1 inc di loop print popa ret convert_to_bin endp ; this macro prints a char in al and advances the current cursor position: putc macro char push ax mov al, char mov ah, 0eh int 10h pop ax endm scan_num proc near push dx push ax push si mov cx, 0 ; reset flag: mov cs:make_minus, 0 not_cr: cmp al, 8 ; 'backspace' pressed? jne backspace_checked mov dx, 0 ; remove last digit by mov ax, cx ; division: div cs:ten ; ax = dx:ax / 10 (dx-rem). mov cx, ax putc ' ' ; clear position. putc 8 ; backspace again. jmp next_digit backspace_checked: ; allow only digits: cmp al, '0' jae ok_ae_0 jmp remove_not_digit ok_ae_0: cmp al, '9' jbe ok_digit stop_input: ; check flag: cmp cs:make_minus, 0 je not_minus neg cx not_minus: pop si pop ax pop dx ret make_minus db ? ; used as a flag. ten dw 10 ; used as multiplier. scan_num endp |
هیچ نظری ثبت نشده است