① 怎麼使電腦從Windows桌面狀態進入匯編語言狀態
在Windows桌面依次點擊「開始」-「運行」,
在運行窗框中鍵入
CMD
回車,則進入DOS窗,
在DOS窗中,鍵入
DEBUG
回車,
則進入「小匯編「語言狀態。
② 用電腦的匯編語言(8086)編寫移動的小車!
用電腦的匯編語言(8086)編寫移動的小車!
DATA SEGMENT
CAR DB 7 ;字元圖形表
DB 52H,10,0,0
DB 0B1H,10,0,1
DB 0DBH,10,0,1
DB 0DBH,10,0,1
DB 4FH, 7,1,0
DB 4FH, 7,0,-3
DB 2,7,-2,1
CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS
stack segment stack
db 100 p (?)
stack ends
CODE SEGMENT 'code'
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA ;初始化DS
MOV DS,AX
MOV AH,0 ;設置300×200彩色圖形方式
MOV AL,4
INT 10H
MOV AH,0BH ;設置背景顏色
MOV BH,0
MOV BL,2
INT 10H
MOV AH,0BH ;設置彩色調板
MOV BH,01
MOV BL,00
INT 10H
;CALL CLEAR_SCREEN ;清屏
LEA DI,CAR ;DI指向字元圖形表
MOV DH,1 ;從第5行5列位置開始
MOV DL,1 ;顯示汽車
he: CALL MOVE_SHAPE
jmp he
RET
MAIN ENDP
;
CLEAR_SCREEN PROC NEAR
PUSH AX ;寄存器
PUSH BX
PUSH CX
PUSH DX
; MOV AH,6 ;屏幕上卷功能
; MOV AL,0
; MOV CH,0 ;左上角行號
; MOV CL,0 ;左上角列號
; MOV DH,24 ;右下角行號
; MOV DL,79 ;右下角列號
; MOV BH,7 ;捲入行屬性
; INT 10H ;調用顯示屬性
POP DX ;恢復寄存器
POP CX
POP BX
POP AX
RET ;返回主程序
CLEAR_SCREEN ENDP
;
MOVE_SHAPE PROC NEAR
PUSH AX ;寄存器
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AH,0FH ;取當前顯示方式
INT 10H
SUB CH,CH ;清除計數器CX的高位元組
MOV CL,[DI] ;CL放循環次數
INC DI ;DI指向字元圖形表中的第一個字元
MOV CHAR_CNT,CX ;保存循環次數
MOV POINTER,DI
MOV LINE_ON,DH
MOV COL_ON,DL
PLOT_NEXT:
ADD DH,[DI+2] ;改變行列指針
ADD DL,[DI+3]
CMP DL,80 ;出屏否?
JB MOV_CRSR
CALL ERASE
POP DI
POP DX
POP CX
POP BX
POP AX
RET
MOV_CRSR:
MOV AH,2 ;移動游標位置
INT 10H
MOV AL, [DI]
MOV BL,[DI+1] ;取字元值及屬性
PUSH CX
MOV CX,1
MOV AH,09 ;顯示字元
INT 10H
POP CX
ADD DI,4 ;DI指向下一個字元
LOOP PLOT_NEXT
CALL DLY_QRTR ;調用延時子程序
CALL ERASE ;調用擦除子程序
JMP SHORT PLOT_NEXT
MOVE_SHAPE ENDP
;
ERASE PROC NEAR
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
MOV DL,COL_ON
ERASE_NEXT:
ADD DH,[DI+2]
ADD DL,[DI+3]
MOV AH,2
INT 10H
MOV AL,[DI]
MOV BL,0
PUSH CX
MOV CX,1
MOV AH,9
INT 10H
POP CX
ADD DI,4
LOOP ERASE_NEXT
MOV CX,CHAR_CNT
MOV DI,POINTER
; inc LINE_ON
MOV DH,LINE_ON
INC COL_ON
MOV DL,COL_ON
RET
ERASE ENDP
DLY_QRTR PROC NEAR ;延時子程序
PUSH CX
PUSH DX
MOV DX,5000
D11:
MOV CX,2801
D12:LOOP D12
DEC DX
JNZ D11
POP DX
POP CX
RET
DLY_QRTR ENDP
CODE ENDS
END MAIN