PDA

View Full Version : سوال: توضیح DEFINE_SCAN_NUM و چند دستور دیگر...؟؟؟



javadt
پنج شنبه 08 تیر 1391, 18:27 عصر
سلام
من باید پروژه ماشین حساب بنویسم
برای راه افتادن سمپل calc نرم افزار emulator 8086 رو دیدم چند تا سوال داشتم ممنون می شم دوستان کمکم کنند

این کد هست که دو عدد رو جمع می کنه

#make_COM#

include 'emu8086.inc'
ORG 100h

JMP START

; declaration of variable:
num DW ?

START:

; get first number:
CALL PTHIS
DB 13, 10, 'Calculation Range: [-32768..32767]', 13, 10
DB 13, 10, 'Enter first number: ', 0

CALL scan_num

; keep first number:
MOV num, CX

; get second number:
CALL PTHIS
msg2 DB 13, 10, 'Enter second number: ', 0

CALL scan_num

; add numbers:
ADD num, CX
JO overflow


; print the result:
CALL PTHIS
DB 13, 10, 'The sum is: ', 0

MOV AX, num
CALL print_num

JMP exit

; process overlow error:
overflow:

PRINTN 'We have overflow!'


exit:

RET


DEFINE_SCAN_NUM

DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
; PTHIS prints NULL terminated
; string defined just after
; the CALL PTHIS instruction:
DEFINE_PTHIS

;=================================
END


ممنون می شم یک توضیح در مورد این کدها بدید
تشکر

CALL PTHIS
چرا قبل از هر رشته از PTHIS استفاده می شه؟


DB 13, 10, 'Calculation Range: [-32768..32767]', 13, 10
این اعدا برای چی هستند؟

msg2 DB 13, 10, 'Enter second number: ', 0
msg2 چیه؟


DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
فذق این دو دستور چیه؟

xman_1365_x
جمعه 09 تیر 1391, 18:32 عصر
ممنون می شم یک توضیح در مورد این کدها بدید
توضیح خاصی نداره ، در اول برنامه یک فایل به برنامه وارد شده که ماکرو های آماده emu8086 برای کاربران مبتدی در اون طراحی شده و در این برنامه مثالی از کاربردشون هست،میتونید فایلشو باز کنید راهنمای کلی اول هر ماکرو نوشته شده!


CALL PTHIS
چرا قبل از هر رشته از PTHIS استفاده می شه؟
چون این تابع میاد رشته ای که در بعد از فراخوانی هست رو تا رسیدن به 0 یا null نمایش میده = کار تابع برای چاپ کردن پیغام



DB 13, 10, 'Calculation Range: [-32768..32767]', 13, 10
این اعدا برای چی هستند؟

msg2 DB 13, 10, 'Enter second number: ', 0
msg2 چیه؟

دو عدد اول کار اینتر رو انجام میده به اول سط رفتن و انتقال کرسر به سطر بعد و 0 هم برای نمایش پایان رشته خروجی


DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
فذق این دو دستور چیه؟
اولی عدد ورودی در ax رو علامتدار و دومی بدون علامت در نظر میگیره و نمایش میده برای مثال مقدار ax رو 0xffff ست کنید خروجی رو مشاهده کنید.

در این باره برای شروع زیاد فکر نکنید چون کمی پیچیده نوشته و کاربر تازه کار رو دلسرد میکنه شما فعلا کارتون استفاده ازشون باشه، روند کارشون هم قبلا در تاپیک های دیگه بحث شده مثلا گرفتن ورودی تبدیل به باینری و بلعکس یا ...
فقط یک نکته داره ماکرو های امولاتور که زیبا نوشته شده یعنی ماکرو های که درش تابع تعریف شده و تابع رو حفاظت میکنه تحقیق در این باره به خواننده پست واگذار میشه

موفق باشید