Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[Assembler] emu8086 poruszanie się robotem robot.asm.

#1
Question  [Assembler] emu8086 poruszanie się robotem robot.asm.
Mam takie pytanie. Otóż używam programu emu 8086 version 4.03 w "examples"/"more examples"/ mamy "robot.asm" I teraz mamy zaprogramować robota. Na razie na pustej planszy bez lamp. Aby chodził w okół całej planszy czyli po kwadracie. Oraz po przekątnej. Ma ktoś jakieś pomysły jak to zrobić? Ponoć trzeba wykorzystać pętle. Wrzucam oryginalny kod programu:


Kod:
#start=robot.exe#

name "robot"

#make_bin#
#cs = 500#
#ds = 500#
#ss = 500#    ; stack
#sp = ffff#
#ip = 0#

; this is an example of contoling the robot.

; this code randomly moves the robot,
; and makes it to switch the lamps on and off.

; robot is a mechanical creature and it takes
; some time for it to complete a task.
; status register is used to see if robot is busy or not.

; c:\emu8086\devices\robot.exe uses ports 9, 10 and 11
; source code of the robot and other devices is in:
; c:\emu8086\devices\developer\sources\
; robot is programmed in visual basic 6.0


; robot base i/o port:
r_port equ 9

;===================================

eternal_loop:
; wait until robot
; is ready:
call wait_robot

; examine the area
; in front of the robot:
mov al, 4
out r_port, al

call wait_exam

; get result from
; data register:
in al, r_port + 1

; nothing found?
cmp al, 0
je cont  ; - yes, so continue.

; wall?
cmp al, 255  
je cont  ; - yes, so continue.

; switched-on lamp?
cmp al, 7
jne lamp_off  ; - no, so skip.
; - yes, so switch it off,
;   and turn:
call switch_off_lamp
jmp  cont  ; continue

lamp_off: nop

; if gets here, then we have
; switched-off lamp, because
; all other situations checked
; already:
call switch_on_lamp

cont:
call random_turn

call wait_robot

; try to step forward:
mov al, 1
out r_port, al

call wait_robot

; try to step forward again:
mov al, 1
out r_port, al

jmp eternal_loop ; go again!

;===================================

; this procedure does not
; return until robot is ready
; to receive next command:
wait_robot proc
; check if robot busy:
busy: in al, r_port+2
      test al, 00000010b
      jnz busy ; busy, so wait.
ret    
wait_robot endp

;===================================

; this procedure does not
; return until robot completes
; the examination:
wait_exam proc
; check if has new data:
busy2: in al, r_port+2
       test al, 00000001b
       jz busy2 ; no new data, so wait.
ret    
wait_exam endp

;===================================

; switch off the lamp:
switch_off_lamp proc
mov al, 6
out r_port, al
ret
switch_off_lamp endp

;===================================

; switch on the lamp:
switch_on_lamp proc
mov al, 5
out r_port, al
ret
switch_on_lamp endp

;===================================

; generates a random turn using
; system timer:
random_turn proc

; get number of clock
; ticks since midnight
; in cx:dx
mov ah, 0
int 1ah

; randomize using xor:
xor dh, dl
xor ch, cl
xor ch, dh

test ch, 2
jz no_turn

test ch, 1
jnz turn_right

; turn left:
mov al, 2
out r_port, al
; exit from procedure:
ret  

turn_right:
mov al, 3
out r_port, al

no_turn:
ret
random_turn endp

;===================================
Zarabiaj w sieci! Bez wkładu własnego! Zarabianie w internecie, zarabianie w domu.

https://drogadomiliona.wixsite.com/zarabiajwsieci
 System operacyjny: windows_98_nt Przeglądarka: chrome
#2
RE: [Assembler] emu8086 poruszanie się robotem robot.asm.
Atup..
Zarabiaj w sieci! Bez wkładu własnego! Zarabianie w internecie, zarabianie w domu.

https://drogadomiliona.wixsite.com/zarabiajwsieci
 System operacyjny: windows_98_nt Przeglądarka: chrome
Programy: Polecane / Nowe / Inne




Podobne wątki ([Assembler] emu8086 poruszanie się robotem robot.asm.)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [ASM] Prośba o pomoc w napisaniu programu Kierman 10 15309 15.06.2016, 19:05
Ostatni post: Szachista
  [Assembler]Wczytanie dwóch zmiennych i operacje na nich Pentium4320 2 6023 13.01.2016, 21:13
Ostatni post: Pentium4320
  pacman c++ - automatyczne poruszanie się duszków ser-x7 4 7217 27.12.2015, 19:51
Ostatni post: Szachista

Skocz do:


Wybrane wątki ([Assembler] emu8086 poruszanie się robotem robot.asm.)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 10116 19.05.2018 20:55
Ostatni post: koneton
  Wyszukiwarka w spawnerze nie reaguje na polskie znaki kazik666 0 9923 16.05.2018 12:04
Ostatni post: kazik666
  BASH symulator silnika dawswi1 3 10397 13.05.2018 10:43
Ostatni post: Szachista
  Autohotkey automatyczny zapis TheProgson 0 9998 07.05.2018 21:27
Ostatni post: TheProgson
  VBA Pobieranie wybranych plików z danymi julietta03 1 10275 04.05.2018 08:25
Ostatni post: broda99
  [VBA] Przenoszenie danych między formularzami Pioro 4 10695 23.04.2018 11:48
Ostatni post: broda99
  Skrypt, który szuka i zamienia armen10 2 10197 23.04.2018 10:04
Ostatni post: armen10
  Liniowa regresja w Pythonie a budowanie modelu Trojan3000 2 10359 16.04.2018 13:26
Ostatni post: Trojan3000
  Początki z bashem - jak napisać skrypty: wysłanie maila i kalkulator? Kristov81 4 14164 21.03.2018 18:32
Ostatni post: Szachista
Ściana Zadanie cmd.... Yanke$ 2 11246 16.03.2018 17:20
Ostatni post: FireBytes
  Poszukuj kogoś do pomocy FireBytes 0 9726 16.03.2018 16:58
Ostatni post: FireBytes
  Program liczący liczby pierwsze Mersenne'a raistin 2 10034 12.03.2018 12:51
Ostatni post: Szachista
  Wykres Funkcji w Javie wanhelsing 4 10604 17.02.2018 22:27
Ostatni post: wanhelsing
  [SQL]procedura zliczania czasu CTRL85 0 9667 17.02.2018 12:58
Ostatni post: CTRL85
  [VBA Excel] Zaokrąglanie liczby w górę Pioro 2 11211 13.02.2018 21:25
Ostatni post: Pioro