⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robot.asm

📁 介绍用Java解析网络数据的三种特殊方法
💻 ASM
字号:
#MAKE_BIN#
#CS = 500#
#DS = 500#
#SS = 500#    ; stack is set
#SP = FFFF#   ; automatically.
#IP = 0#

; This is an example of controlling
; the robot attached to a computer.

; This code randomly moves the robot
; and makes it to switch off/on the
; lamps.

; Try improving it!

; Keep in mind that robot is a
; mechanical creature and it takes
; some time for it to complete
; a task.

; 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

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -