exchanging

یک سوال ابتدایی اسمبلی

شروع موضوع توسط mani amoozadeh ‏9 دسامبر 2007 در انجمن برنامه نویسی

  1. mani amoozadeh

    mani amoozadeh کاربر تازه وارد

    تاریخ عضویت:
    ‏9 دسامبر 2007
    نوشته ها:
    2
    تشکر شده:
    0
    با عرض سلام. یک سوال ساده اسمبلی داشتم اگر کسی می تواند کمک نماید.

    برنامه debug.exe را باز کردم و برنامه ساده زیر را نوشته و اجرا کردم. بر طبق این برنامه عدد 100 در ثبات ax و متمم 2 عدد -100 یعنی FF00 در داخل ثبات bx قرار گرفته و حاصل جمع در ax قرار می گیرد. طبیعتا حاصل جمع صفر بوده و یک رقم نقلی داریم ( پرچم نقلی 1 می شود).

    Mov ax,100
    Mov bx,-100
    Add ax,bx

    حال برنامه دوم را به صورت زیر در debug نوشته و اجرا کردم. برنامه زیر همان کار برنامه بالا را انجام می دهد با این تفاوت که دو عدد 100 را از 100 کم کردم. واضح است که نتیجه باز صفر میشود. ولی با کمال تعجب دیدم که پرچم نقلی 1 نشده است و صفر است !!! مگر تمامی پردازنده ها عمل تفریق را با استفاده از متمم 2 انجام نمی دهند. این بدان معنا است که عبارت 100-100 به صورت FF00+0100 انجام می شود. در این حالت رقم نقلی داریم ( عین بالا) ولی چرا پرچم نقلی 1 نشده است ؟؟؟؟

    Mov ax,100
    Mov bx,100
    Sub ax,bx

    کسی می تواند کمکم کند ؟
    پیشاپیش متشکرم.
     
  2. mani amoozadeh

    mani amoozadeh کاربر تازه وارد

    تاریخ عضویت:
    ‏9 دسامبر 2007
    نوشته ها:
    2
    تشکر شده:
    0
    خودم جواب رو پیدا کردم :happy:
    موقعی که برای تفریق از متمم 2 استفاده می کنیم اگر رقم نقلی ایجاد شود از آن چشم پوشی می کنیم !
    به همین علت درست است که رقم نقلی داریم ولی پرچم نقلی دستخوش تغییر نمی شود.