lancer0rz
8086汇编

8086汇编

3.1

手搓了一个抽卡模拟器,很丑陋

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
DATA   SEGMENT                               
WEL DB "welcome! plz make your choice",0AH, 0DH,'0:quit',0AH, 0DH,'1:single',0AH, 0DH,'2:ten times',0AH, 0DH,'>>','$'
WEL_2 DB 'press 1 to continue,press 0 to back',0AH, 0DH,'>>','$'
gold DB 'Hu Tao',0
purple DB 'Xing Qiu',0
rubb DB 'rubbish',0
BUF DB 20,?,20 DUP('$')
random_seed dw 0
CRLF DB 0AH, 0DH,'$'
DATA ENDS

STACK SEGMENT STACK
DW 20 DUP(0)
STACK ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
mov ah,00h
mov al,03h
int 10h
mov ax,0
LEA DX, WEL ;欢迎
MOV AH, 09H
INT 21H

lea dx,BUF
mov AH,0AH
int 21H

mov al,buf+2
cmp al,'0'
je break
cmp al,'1'
je lev2
jmp short lev1

lev1:
mov cx,10
s1:
call draw

loop s1

lea dx,WEL_2
mov AH,09H
int 21H

LEA DX, CRLF
MOV AH, 09H
INT 21H

lea dx,BUF
mov AH,0AH
int 21H

MOV ah,buf+2
cmp ah,'0'
je START
jmp short lev1
lev2:
call draw
lea dx,WEL_2
mov AH,09H
int 21H

LEA DX, CRLF
MOV AH, 09H
INT 21H

lea dx,BUF
mov AH,0AH
int 21H


MOV ah,buf+2
cmp ah,'0'
je START
jmp short lev2

break:
MOV AH, 04CH ;退出
INT 21H


rand:
mov ax, 0h
out 43h, al
in al, 40h
in al, 40h
in al, 40h;访问3次,保证随机性


mov bl, 100
div bl

mov al, ah
mov ah, 0
ret


;------------------------------
draw:
call rand
cmp al,10
je print_g
jb print_p

;1
MOV AH, 0EH
MOV BL, 01001B

mov si,offset rubb
mov di,0

printloop3:
lodsb
or al,al
jz endprint3

int 010h
jmp printloop3

endprint3:
LEA DX, CRLF
MOV AH, 09H
INT 21H

ret

;2
print_g:
MOV AH, 0EH
MOV BL, 01110B

mov si,offset gold
mov di,0

printloop1:
lodsb
or al,al
jz endprint1

int 010h
jmp printloop1

endprint1:
LEA DX, CRLF
MOV AH, 09H
INT 21H

ret
;3
print_p:
MOV AH, 0EH
MOV BL, 01101B

mov si,offset purple
mov di,0

printloop2:
lodsb
or al,al
jz endprint2

int 010h
jmp printloop2

endprint2:
LEA DX, CRLF
MOV AH, 09H
INT 21H

ret

CODE ENDS
END START
本文作者:lancer0rz
本文链接:http://example.com/2024/03/02/8086汇编/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可