Как я могу делать события мыши DOSBox Assembly

Я только начал изучать язык "ассемблера".

Как я могу печатать «Hello World» каждый раз, когда я щелкаю левой кнопкой мыши, и печатать «Bad World» каждый раз, когда щелкаю правой кнопкой мыши на DOSBox.


person Hasan Can Buyukasik    schedule 15.05.2017    source источник
comment
DOS не поддерживает мышь. Вам нужно будет предоставить своего собственного водителя. Каждый из них имеет свой программный интерфейс, поэтому смотрите его документацию, чтобы узнать, как это сделать. Кстати, это не очень хороший проект для тех, кто только начинает изучать ассемблер. Начните с вывода некоторых значений на экран, возможно, чтения ввода с клавиатуры.   -  person Cody Gray    schedule 15.05.2017
comment
Он содержит слишком много деталей, мне трудно их понять, но спасибо за перенаправление. @ХосеМануэльАбаркаРодригес.   -  person Hasan Can Buyukasik    schedule 15.05.2017
comment
Хасан, вам нужна только процедура GetMouseState (stackoverflow.com/a/37795357/3298930)   -  person Jose Manuel Abarca Rodríguez    schedule 15.05.2017


Ответы (1)


Думаю, я нашел решение проблемы.

  program SEGMENT
  ASSUME CS:program,DS:program
  ORG 100h

Сначала нам нужно вызвать курсор мыши. Проверьте каталог http://stanislavs.org/helppc/int_33.html

  start:
  MOV AX,01
  INT 33h

http://stanislavs.org/helppc/int_33-5.html Мы не будем используйте другие биты, кроме двух последних битов, поэтому мы сделали остальные нулевыми с помощью оператора AND.

  loop:
  MOV AX,03
  INT 33h
  AND BX,3h

Мы сравниваем повернутое значение и отправляем функцию в соответствии с результатом

  CMP BX,1
  JE  left
  CMP BX,2
  JE  right

  cmp BX,0
  je  endss
  cmp bx,3 
  je  endss
  right:
  MOV DX,OFFSET stringright
  MOV AH,09h
  INT 21h


  jmp endss
  left:
  MOV DX,OFFSET stringleft
  MOV AH,09h
  INT 21h

  endss:

  jmp loop
  stringright DB "Right Clicked $"
  stringleft DB "Left Clicked $" 

  INT 20h
  program ENDS
  END start
person Hasan Can Buyukasik    schedule 16.05.2017