ورود

View Full Version : پیاده سازی ساختارswitch-case



nimaansary
دوشنبه 17 تیر 1392, 22:22 عصر
باسلام
میخوام ساختار switch case رو با اسمبلی پیاده سازی کنم !
دو تا دکمه بهش تعریف کنم ، هر کدوم رو که زدم وارد case اون دکمه بشه.
متشکر

m.j_banitaba
سه شنبه 18 تیر 1392, 07:22 صبح
یک آرایه از آدرس ها درست کن سپس هر بار که دکمه ای فشار داده شد آدرس متناظر با آن را در رجیستر eax بارگذاری کن سپس از دستور jmp eax استفاده کن .
http://stackoverflow.com/questions/3012011/switch-case-assembly-level-code
البته می تونی از یک جدول کمکی برای تبدیل کد صفحه کلید به کد اندیس جدول switch نیز استفاده کنی.

nimaansary
سه شنبه 18 تیر 1392, 22:09 عصر
این لینکی که دادین واسه 8086 جواب میده دیگه؟؟
من از emulator استفاده میکنم

m.j_banitaba
چهارشنبه 19 تیر 1392, 09:40 صبح
ایدش همونه کدهاشو یکم باید دستکاری کنی.

nimaansary
چهارشنبه 19 تیر 1392, 18:49 عصر
اگه یه کم کمکم کنید ممنون میشم.
دقیقا کدوم قسمتهاش نیاز به تغییر داره و چه تغییری؟؟؟
من حرف a رو دریافت مکنم کدش 36h هستش چطور مقایسه ش کنم و برسم به case ش ؟

darknes666
پنج شنبه 20 تیر 1392, 10:09 صبح
دوست عزیز اولا حرف a کد اسکیش 61h هست.
خب مثلا میخواییم اگر دگمه ی a فشرده شد عدد 20h رو تو dx قرار بده.میشه اینجوری:

STACKSG SEGMENT STACK 'STACK'
DB 64H DUP(0)
STACKSG ENDS

DATASG SEGMENT 'DATA'

a_KEY DB 61H

DATASG ENDS

CODESG SEGMENT 'CODE'
ASSUME SS:STACKSG,DS:DATASG,CS:CODESG
MAIN PROC NEAR
;////////////////
MOV AH,01H
INT 21H
CMP AH,a_KEY
JNE LABEL1


LABEL1:
MOV DX,20H


;////////////////
MOV AX,4C00H
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN

m.j_banitaba
پنج شنبه 20 تیر 1392, 11:02 صبح
اول یک جدول تعریف می کنی تبدیل کد کلید به کد case بعد کد case را اجرا می کنی:


key_table dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0
حالا یک جدول هم برای case انتخاب می کنی

case_tbl dd label0,label1

بعدشم کد رو از اولی می خونی تو دومی می ذاری و jmp می کنی

mov bx,[ax+key_table]
jmp [bx+case_tbl]
label1:
//case 1
label0:
//case default