├── .gitattributes ├── .gitignore ├── 01.asm ├── 02.asm ├── 03.asm ├── 04-1.asm ├── 04-2.asm ├── 05.asm ├── 06.asm ├── 07.asm ├── 08.asm ├── 09.asm ├── 10.asm ├── 11.asm ├── 12.asm ├── 13.asm ├── 14.asm ├── 15-1.asm ├── 15.asm ├── 16.asm ├── README.md └── demo ├── demo10.gif ├── demo11.gif ├── demo12.gif ├── demo13.gif ├── demo14.gif ├── demo15.gif ├── demo16.gif ├── demo17.gif ├── demo18.gif ├── demo19.gif ├── demo2.png ├── demo20.gif ├── demo6.png ├── demo7.gif ├── demo8.gif └── demo9.gif /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | 3 | # Mobile Tools for Java (J2ME) 4 | .mtj.tmp/ 5 | 6 | # Package Files # 7 | *.jar 8 | *.war 9 | *.ear 10 | 11 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 12 | hs_err_pid* 13 | 14 | # ========================= 15 | # Operating System Files 16 | # ========================= 17 | 18 | # OSX 19 | # ========================= 20 | 21 | .DS_Store 22 | .AppleDouble 23 | .LSOverride 24 | 25 | # Icon must ends with two \r. 26 | Icon 27 | 28 | # Thumbnails 29 | ._* 30 | 31 | # Files that might appear on external disk 32 | .Spotlight-V100 33 | .Trashes 34 | 35 | # Windows 36 | # ========================= 37 | 38 | # Windows image file caches 39 | Thumbs.db 40 | ehthumbs.db 41 | 42 | # Folder config file 43 | Desktop.ini 44 | 45 | # Recycle Bin used on file shares 46 | $RECYCLE.BIN/ 47 | 48 | # Windows Installer files 49 | *.cab 50 | *.msi 51 | *.msm 52 | *.msp 53 | 54 | # Object Files 55 | *.OBJ 56 | 57 | # List Files 58 | *.LST 59 | 60 | # Map files 61 | *.MAP 62 | 63 | # Executable files 64 | *.EXE 65 | 66 | MASM.EXE 67 | LINK.EXE 68 | debug.exe -------------------------------------------------------------------------------- /01.asm: -------------------------------------------------------------------------------- 1 | data segment 2 | dw 078b8h,08eb8h,0bbd8h,0004eh,007c6h,0c641h,00147h,0b802h,04c00h,021cdh 3 | data ends 4 | end 5 | -------------------------------------------------------------------------------- /02.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | OriginalStr segment 3 | db 'Hello world!' 4 | OriginalStr ends 5 | 6 | EncryStr segment 7 | db 12 dup (00h) 8 | EncryStr ends 9 | 10 | DecryStr segment 11 | db 12 dup (00h) 12 | DecryStr ends 13 | 14 | words segment 15 | db "The original string is:" 16 | db "The encryption string :" 17 | db "The decryption string :" 18 | words ends 19 | 20 | stack segment 21 | db 12 dup (00h) 22 | stack ends 23 | 24 | code segment 25 | start: 26 | ;加密过程 27 | mov ax,stack 28 | mov ss,ax 29 | mov sp,16 30 | mov ax,OriginalStr 31 | mov ds,ax 32 | mov bx,0 33 | mov cx,11 34 | mov dl,2 35 | s1: 36 | mov al,[bx] 37 | add al,[bx+1] 38 | mov ah,0 39 | div dl 40 | mov [bx+10h],al 41 | inc bx 42 | push ax 43 | loop s1 44 | mov al,[bx] 45 | add al,20h 46 | mov ah,0 47 | div dl 48 | mov [bx+10h],al 49 | push ax 50 | 51 | ;解密过程 52 | mov ax,EncryStr 53 | mov ds,ax 54 | mov bx,11 55 | mov cx,12 56 | mov dl,2 57 | pop ax 58 | mov al,ah 59 | add al,[bx] 60 | add al,[bx] 61 | sub al,20h 62 | mov [bx+10h],al 63 | dec bx 64 | s2: 65 | pop ax 66 | mov al,ah 67 | add al,[bx] 68 | add al,[bx] 69 | sub al,[bx+11h] 70 | mov [bx+10h],al 71 | dec bx 72 | loop s2 73 | 74 | ;屏幕显示 75 | mov ax,0b878h 76 | mov ds,ax 77 | mov ax,words 78 | mov es,ax 79 | mov bx,0 80 | mov ah,1110010b; 81 | mov cx,23 82 | s3: 83 | mov al,es:[bx] 84 | mov si,bx 85 | add si,bx 86 | mov [si],al 87 | mov [si+1],ah 88 | inc bx 89 | loop s3 90 | mov ax,OriginalStr 91 | mov es,ax 92 | mov cx,12 93 | mov bx,0 94 | mov ah,1110010b; 95 | s6: 96 | mov al,es:[bx] 97 | mov si,46 98 | add si,bx 99 | add si,bx 100 | mov [si],al 101 | mov [si+1],ah 102 | inc bx 103 | loop s6 104 | 105 | mov ax,0b88ch 106 | mov ds,ax 107 | mov ax,words 108 | mov es,ax 109 | mov bx,0 110 | mov ah,1110100b; 111 | mov cx,23 112 | s4: 113 | mov al,es:[bx] 114 | mov si,bx 115 | add si,bx 116 | mov [si],al 117 | mov [si+1],ah 118 | inc bx 119 | loop s4 120 | mov ax,EncryStr 121 | mov es,ax 122 | mov cx,12 123 | mov bx,0 124 | mov ah,1110100b; 125 | s7: 126 | mov al,es:[bx] 127 | mov si,46 128 | add si,bx 129 | add si,bx 130 | mov [si],al 131 | mov [si+1],ah 132 | inc bx 133 | loop s7 134 | 135 | mov ax,0b8a0h 136 | mov ds,ax 137 | mov ax,words 138 | mov es,ax 139 | mov bx,0 140 | mov ah,1110001b; 141 | mov cx,23 142 | s5: 143 | mov al,es:[bx] 144 | mov si,bx 145 | add si,bx 146 | mov [si],al 147 | mov [si+1],ah 148 | inc bx 149 | loop s5 150 | mov ax,DecryStr 151 | mov es,ax 152 | mov cx,12 153 | mov bx,0 154 | mov ah,1110001b; 155 | s8: 156 | mov al,es:[bx] 157 | mov si,46 158 | add si,bx 159 | add si,bx 160 | mov [si],al 161 | mov [si+1],ah 162 | inc bx 163 | loop s8 164 | 165 | mov ax,4c00h 166 | int 21h 167 | code ends 168 | end start -------------------------------------------------------------------------------- /03.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | 3 | Calculate segment 4 | db '1.3/1= ' 5 | db '2.5+3= ' 6 | db '3.9-3= ' 7 | db '4.4+5= ' 8 | Calculate ends 9 | 10 | stack segment 11 | db 16 dup (0) 12 | stack ends 13 | 14 | code segment 15 | s1: 16 | mov cl,[bx+3] 17 | sub cl,'-' 18 | add cl,1 19 | loop s2 20 | 21 | ;减法 22 | mov dl,[bx+4] 23 | sub dl,30h 24 | mov al,[bx] 25 | sub al,30h 26 | sub al,dl 27 | add al,30h 28 | mov [bx+6],al 29 | mov byte ptr [bx+7],'.' 30 | mov al,[bx+2] 31 | mov [bx+8],al 32 | add bx,10h 33 | pop cx 34 | loop s 35 | mov cx,1 36 | loop s0 37 | 38 | s2: 39 | ;除法 40 | mov dl,[bx+4] 41 | sub dl,30h 42 | mov al,[bx] 43 | sub al,30h 44 | div dl 45 | add al,30h 46 | mov [bx+6],al 47 | mov byte ptr [bx+7],'.' 48 | mov ah,0 49 | mov al,[bx+2] 50 | sub al,30h 51 | div dl 52 | add al,30h 53 | mov [bx+8],al 54 | add bx,10h 55 | pop cx 56 | loop s 57 | mov cx,1 58 | loop s0 59 | 60 | ;程序入口 61 | start: 62 | mov ax,stack 63 | mov ss,ax 64 | mov sp,16 65 | mov cx,4 66 | mov bx,0 67 | mov ax,Calculate 68 | mov ds,ax 69 | mov ah,0 70 | s: 71 | push cx 72 | mov cl,[bx+3] 73 | sub cl,'+' 74 | add cl,1 75 | loop s1 76 | 77 | ;加法 78 | mov dl,[bx+4] 79 | sub dl,30h 80 | mov al,[bx] 81 | sub al,30h 82 | add al,dl 83 | add al,30h 84 | mov [bx+6],al 85 | mov byte ptr [bx+7],'.' 86 | mov al,[bx+2] 87 | mov [bx+8],al 88 | add bx,10h 89 | pop cx 90 | loop s 91 | mov cx,1 92 | loop s0 93 | 94 | ;打印结果 95 | s0: 96 | mov ax,Calculate 97 | mov es,ax 98 | mov bx,0 99 | mov ax,0b878h 100 | mov ds,ax 101 | mov ah,10111b 102 | mov cx,64 103 | s3: 104 | mov al,es:[bx] 105 | mov si,bx 106 | add si,bx 107 | mov [si],al 108 | mov [si+1],ah 109 | inc bx 110 | loop s3 111 | 112 | mov ax,4c00h 113 | int 21h 114 | code ends 115 | end start 116 | -------------------------------------------------------------------------------- /04-1.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | dw 2,15,0 4 | data ends 5 | stack segment 6 | dw 8 dup (0) 7 | stack ends 8 | code segment 9 | start: 10 | ;使用mul计算乘方 11 | mov ax,stack 12 | mov ss,ax 13 | mov sp,16 14 | mov ax,data 15 | mov ds,ax 16 | mov bx,0 17 | mov cx,[bx+2] 18 | mov dl,[bx] 19 | mov bx,dx 20 | mov al,1 21 | mov ah,0 22 | s1: 23 | mul bx 24 | loop s1 25 | mov dx,ax 26 | 27 | ;显示结果 28 | mov ax,0b878h 29 | mov ds,ax 30 | mov bx,288h 31 | mov ax,dx 32 | mov dx,0 33 | mov cx,5 34 | s5: 35 | push cx 36 | mov cx,10 37 | div cx 38 | add dl,30h 39 | mov [bx],dl 40 | sub bx,2 41 | mov dx,0 42 | pop cx 43 | loop s5 44 | 45 | mov bx,8h 46 | mov ax,data 47 | mov ss,ax 48 | mov sp,0 49 | pop ax 50 | mov dx,0 51 | mov cx,5 52 | s3: 53 | push cx 54 | mov cx,10 55 | div cx 56 | add dl,30h 57 | mov [bx],dl 58 | sub bx,2 59 | mov dx,0 60 | pop cx 61 | loop s3 62 | 63 | mov bx,0a0h 64 | mov byte ptr [bx],'^' 65 | 66 | mov bx,148h 67 | pop ax 68 | mov dx,0 69 | mov cx,5 70 | s4: 71 | push cx 72 | mov cx,10 73 | div cx 74 | add dl,30h 75 | mov [bx],dl 76 | sub bx,2 77 | mov dx,0 78 | pop cx 79 | loop s4 80 | 81 | mov bx,1e0h 82 | mov byte ptr [bx+0h],'-' 83 | mov byte ptr [bx+2h],'-' 84 | mov byte ptr [bx+4h],'-' 85 | mov byte ptr [bx+6h],'-' 86 | mov byte ptr [bx+8h],'-' 87 | 88 | mov ax,4c00h 89 | int 21h 90 | code ends 91 | end start -------------------------------------------------------------------------------- /04-2.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | dw 2,15,0 4 | data ends 5 | stack segment 6 | dw 8 dup (0) 7 | stack ends 8 | code segment 9 | start: 10 | ;使用add计算乘方 11 | mov ax,stack 12 | mov ss,ax 13 | mov sp,16 14 | mov ax,data 15 | mov ds,ax 16 | mov bx,0 17 | mov cx,[bx+2] 18 | mov dl,[bx] 19 | mov bx,dx 20 | mov al,1 21 | mov ah,0 22 | s1: 23 | push cx 24 | mov cx,bx 25 | mov dx,ax 26 | mov ax,0 27 | s: 28 | add ax,dx 29 | loop s 30 | pop cx 31 | loop s1 32 | mov dx,ax 33 | 34 | ;显示结果 35 | mov ax,0b878h 36 | mov ds,ax 37 | mov bx,288h 38 | mov ax,dx 39 | mov dx,0 40 | mov cx,5 41 | s5: 42 | push cx 43 | mov cx,10 44 | div cx 45 | add dl,30h 46 | mov [bx],dl 47 | sub bx,2 48 | mov dx,0 49 | pop cx 50 | loop s5 51 | 52 | mov bx,8h 53 | mov ax,data 54 | mov ss,ax 55 | mov sp,0 56 | pop ax 57 | mov dx,0 58 | mov cx,5 59 | s3: 60 | push cx 61 | mov cx,10 62 | div cx 63 | add dl,30h 64 | mov [bx],dl 65 | sub bx,2 66 | mov dx,0 67 | pop cx 68 | loop s3 69 | 70 | mov bx,0a0h 71 | mov byte ptr [bx],'^' 72 | 73 | mov bx,148h 74 | pop ax 75 | mov dx,0 76 | mov cx,5 77 | s4: 78 | push cx 79 | mov cx,10 80 | div cx 81 | add dl,30h 82 | mov [bx],dl 83 | sub bx,2 84 | mov dx,0 85 | pop cx 86 | loop s4 87 | 88 | mov bx,1e0h 89 | mov byte ptr [bx+0h],'-' 90 | mov byte ptr [bx+2h],'-' 91 | mov byte ptr [bx+4h],'-' 92 | mov byte ptr [bx+6h],'-' 93 | mov byte ptr [bx+8h],'-' 94 | 95 | mov ax,4c00h 96 | int 21h 97 | code ends 98 | end start -------------------------------------------------------------------------------- /05.asm: -------------------------------------------------------------------------------- 1 | assume cs:code,ds:data 2 | data segment 3 | db 'h12E332l@L#O*&^!88nI@cE$% %$T1O m33E44E55t y77O88u!()' 4 | db '?' 5 | data ends 6 | stack segment 7 | dw 64 dup (0) 8 | stack ends 9 | code segment 10 | j: 11 | mov ax,4c00h 12 | int 21h 13 | 14 | start: 15 | mov ax,data 16 | mov ds,ax 17 | mov si,0 18 | mov ax,0b800h 19 | mov es,ax 20 | mov di,1440 21 | mov ah,0 22 | mov bh,0 23 | 24 | s: 25 | mov al,ds:[si] 26 | inc si 27 | 28 | mov ah,0 29 | mov dl,al 30 | call zifu 31 | jcxz xianshizifu 32 | zf: 33 | mov ah,0 34 | mov al,dl 35 | call gan 36 | jcxz xianshigan 37 | gg: 38 | mov ah,0 39 | mov al,dl 40 | call kongge 41 | jcxz xianshikong 42 | kk: 43 | mov ah,0 44 | mov al,dl 45 | call wenhao 46 | jcxz j 47 | jmp short s 48 | 49 | xianshizifu: 50 | mov al,dl 51 | mov ch,0 52 | add bh,1 53 | dec bh 54 | dec bh 55 | mov cl,bh 56 | jcxz daxie 57 | or al,00100000b 58 | hh1: 59 | mov ah,00000001b 60 | mov es:[di],ax 61 | add di,2 62 | jmp short zf 63 | daxie: 64 | mov ch,0 65 | mov cl,20h 66 | da: 67 | dec al 68 | loop da 69 | mov bh,1 70 | jmp short hh1 71 | 72 | xianshigan: 73 | mov al,dl 74 | mov ah,00000001b 75 | mov es:[di],ax 76 | add di,2 77 | mov bh,0 78 | jmp short gg 79 | 80 | xianshikong: 81 | mov al,dl 82 | mov ah,00000001b 83 | mov es:[di],ax 84 | add di,2 85 | jmp short kk 86 | 87 | zifu: 88 | or al,00100000b 89 | mov ch,0 90 | mov cl,60h 91 | z1: 92 | dec al 93 | loop z1 94 | mov cl,26 95 | z2: 96 | mov bl,cl 97 | dec al 98 | mov cl,al 99 | jcxz z3 100 | mov cl,bl 101 | loop z2 102 | jmp short z4 103 | z3: 104 | add bh,1 105 | z4: 106 | mov cl,al 107 | ret 108 | 109 | gan: 110 | mov ch,0 111 | mov cl,21h 112 | g1: 113 | dec al 114 | loop g1 115 | mov cl,al 116 | ret 117 | 118 | kongge: 119 | mov ch,0 120 | mov cl,20h 121 | kong1: 122 | dec al 123 | loop kong1 124 | mov cl,al 125 | ret 126 | 127 | wenhao: 128 | mov ch,0 129 | mov cl,3fh 130 | w1: 131 | dec al 132 | loop w1 133 | mov cl,al 134 | ret 135 | 136 | code ends 137 | end start -------------------------------------------------------------------------------- /06.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | ;-- 文字: 中 -- 4 | ;-- 宋体15; 此字体下对应的点阵为:宽x高=20x20 -- 5 | ;-- 高度不是8的倍数,现调整为:宽度x高度=20x24 --; 6 | DB 000H,000H,000H,000H,030H,000H,000H,03CH,000H,000H,038H,000H,000H,038H,000H,000H 7 | DB 038H,000H,038H,038H,01CH,03FH,0FFH,0FCH,018H,038H,038H,018H,038H,038H,018H,038H 8 | DB 038H,018H,038H,038H,018H,038H,038H,018H,038H,038H,03FH,0FFH,0F8H,038H,038H,038H 9 | DB 000H,038H,000H,000H,038H,000H,000H,038H,000H,000H,038H,000H,000H,038H,000H,000H 10 | DB 038H,000H,000H,038H,000H,000H,000H,000H 11 | 12 | ;-- 文字: 华 -- 13 | ;-- 宋体15; 此字体下对应的点阵为:宽x高=20x20 -- 14 | ;-- 高度不是8的倍数,现调整为:宽度x高度=20x24 --; 15 | DB 000H,000H,000H,000H,008H,000H,003H,08EH,000H,003H,0CCH,018H,007H,00CH,03CH,00EH 16 | DB 00CH,0FCH,00FH,00DH,0E0H,01FH,00FH,080H,03FH,00EH,00CH,077H,03CH,00CH,067H,0ECH 17 | DB 00EH,007H,08CH,00EH,007H,00FH,0FEH,007H,038H,000H,000H,03CH,000H,000H,038H,00CH 18 | DB 0FFH,0FFH,0FEH,000H,038H,003H,000H,038H,000H,000H,038H,000H,000H,038H,000H,000H 19 | DB 038H,000H,000H,038H,000H,000H,000H,000H 20 | data ends 21 | 22 | 23 | ;下面一部分是将16进制数据转换为二进制显示.用来比较清楚的明白点阵情况 24 | ;因为点阵的宽高比,相当于3*8个为一行,可以隐约看到中字的尖 25 | ;00000000 00000000 00000000 26 | ;00000000 00110000 00000000 27 | ;00000000 00111100 00000000 28 | 29 | code segment 30 | start: 31 | mov ax,0b800h 32 | mov es,ax 33 | mov ax,data 34 | mov ds,ax 35 | ;mov bx,0 36 | mov si,0 37 | mov bh,100b ;黑底红字 38 | mov bl,03h ;心形 39 | mov ah,0 ;用ax存点阵 40 | mov dh,0 ;用于计数判定3字每行循环 41 | mov di,180 ;"中"起始位置 42 | jmp read 43 | 44 | ;子程序 45 | over: mov ax,4c00h 46 | int 21h 47 | 48 | ;hua: 49 | ; mov di,92 50 | ; ret 51 | check: cmp si,72 52 | jne next2 53 | mov di,136 ;"华"起始位置;为什么是这个位置,而不是我算的中间偏右的位置开始才对? 54 | next2:cmp si,144 55 | je over 56 | cmp dh,3 57 | jne read 58 | mov dh,0 59 | add di,112 ;换行 60 | jmp read 61 | 62 | read: 63 | mov al,ds:[si] 64 | inc si 65 | inc dh 66 | jmp div2 67 | 68 | ;show: mov es:[di],bx 69 | ; ret 70 | doom: 71 | mov cx,8 72 | s1: 73 | pop ax 74 | cmp ah,1 75 | jne next 76 | mov es:[di],bx 77 | next: add di,2 78 | loop s1 79 | jmp check 80 | 81 | 82 | ;16进制转化为2进制,并入栈存储 83 | div2: 84 | mov cx,8 85 | s0: mov dl,2 86 | div dl 87 | mov dl,al ;商暂存于dl中 88 | mov al,0 89 | push ax ;余数入栈 90 | mov al,dl ;上次除法的商恢复到ax中 91 | loop s0 92 | jmp doom 93 | 94 | code ends 95 | end start 96 | -------------------------------------------------------------------------------- /07.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data1 segment 3 | ;-- 调入了一幅图像:这是您新建的图像 -- 4 | ;-- 宽度x高度=80x25 -- 5 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 6 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 7 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 8 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 9 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 10 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 11 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 12 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,002H,000H,000H,000H 13 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 14 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 15 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 16 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 17 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 18 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 19 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 20 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 21 | data1 ends 22 | data2 segment 23 | ;-- 调入了一幅图像:这是您新建的图像 -- 24 | ;-- 宽度x高度=80x25 -- 25 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 26 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 27 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 28 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 29 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 30 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 31 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 32 | DB 000H,000H,005H,000H,000H,000H,000H,000H,000H,000H,000H,000H,00AH,080H,000H,000H 33 | DB 000H,000H,000H,000H,000H,000H,005H,000H,000H,000H,000H,000H,000H,000H,000H,000H 34 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 35 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 36 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 37 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 38 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 39 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 40 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 41 | data2 ends 42 | data3 segment 43 | ;-- 调入了一幅图像:这是您新建的图像 -- 44 | ;-- 宽度x高度=80x25 -- 45 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 46 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 47 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 48 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 49 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 50 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 51 | DB 000H,000H,000H,000H,000H,000H,000H,000H,00AH,080H,000H,000H,000H,000H,000H,000H 52 | DB 000H,000H,015H,040H,000H,000H,000H,000H,000H,000H,000H,000H,02AH,0A0H,000H,000H 53 | DB 000H,000H,000H,000H,000H,000H,015H,040H,000H,000H,000H,000H,000H,000H,000H,000H 54 | DB 00AH,080H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 55 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 56 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 57 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 58 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 59 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 60 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 61 | data3 ends 62 | data4 segment 63 | ;-- 调入了一幅图像:这是您新建的图像 -- 64 | ;-- 宽度x高度=80x25 -- 65 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 66 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 67 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 68 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 69 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 70 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,015H,040H 71 | DB 000H,000H,000H,000H,000H,000H,000H,000H,02AH,0A0H,000H,000H,000H,000H,000H,000H 72 | DB 000H,000H,055H,050H,000H,000H,000H,000H,000H,000H,000H,000H,0AAH,0A8H,000H,000H 73 | DB 000H,000H,000H,000H,000H,000H,055H,050H,000H,000H,000H,000H,000H,000H,000H,000H 74 | DB 02AH,0A0H,000H,000H,000H,000H,000H,000H,000H,000H,015H,040H,000H,000H,000H,000H 75 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 76 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 77 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 78 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 79 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 80 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 81 | data4 ends 82 | data5 segment 83 | ;-- 调入了一幅图像:这是您新建的图像 -- 84 | ;-- 宽度x高度=80x25 -- 85 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 86 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 87 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 88 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 89 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 90 | DB 000H,000H,000H,000H,02AH,0A0H,000H,000H,000H,000H,000H,000H,000H,000H,055H,050H 91 | DB 000H,000H,000H,000H,000H,000H,000H,000H,0AAH,0A8H,000H,000H,000H,000H,000H,000H 92 | DB 000H,001H,055H,054H,000H,000H,000H,000H,000H,000H,000H,002H,0AAH,0AAH,000H,000H 93 | DB 000H,000H,000H,000H,000H,001H,055H,054H,000H,000H,000H,000H,000H,000H,000H,000H 94 | DB 0AAH,0A8H,000H,000H,000H,000H,000H,000H,000H,000H,055H,050H,000H,000H,000H,000H 95 | DB 000H,000H,000H,000H,02AH,0A0H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 96 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 97 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 98 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 99 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 100 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 101 | data5 ends 102 | data6 segment 103 | ;-- 调入了一幅图像:这是您新建的图像 -- 104 | ;-- 宽度x高度=80x25 -- 105 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 106 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 107 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 108 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 109 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,055H,050H,000H,000H,000H,000H 110 | DB 000H,000H,000H,000H,0AAH,0A8H,000H,000H,000H,000H,000H,000H,000H,001H,055H,054H 111 | DB 000H,000H,000H,000H,000H,000H,000H,002H,0AAH,0AAH,000H,000H,000H,000H,000H,000H 112 | DB 000H,005H,055H,055H,000H,000H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,080H,000H 113 | DB 000H,000H,000H,000H,000H,005H,055H,055H,000H,000H,000H,000H,000H,000H,000H,002H 114 | DB 0AAH,0AAH,000H,000H,000H,000H,000H,000H,000H,001H,055H,054H,000H,000H,000H,000H 115 | DB 000H,000H,000H,000H,0AAH,0A8H,000H,000H,000H,000H,000H,000H,000H,000H,055H,050H 116 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 117 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 118 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 119 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 120 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 121 | data6 ends 122 | data7 segment 123 | ;-- 调入了一幅图像:这是您新建的图像 -- 124 | ;-- 宽度x高度=80x25 -- 125 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 126 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 127 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 128 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 129 | DB 0AAH,0A8H,000H,000H,000H,000H,000H,000H,000H,001H,055H,054H,000H,000H,000H,000H 130 | DB 000H,000H,000H,002H,0AAH,0AAH,000H,000H,000H,000H,000H,000H,000H,005H,055H,055H 131 | DB 000H,000H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,080H,000H,000H,000H,000H,000H 132 | DB 000H,015H,055H,055H,040H,000H,000H,000H,000H,000H,000H,02AH,0AAH,0AAH,0A0H,000H 133 | DB 000H,000H,000H,000H,000H,015H,055H,055H,040H,000H,000H,000H,000H,000H,000H,00AH 134 | DB 0AAH,0AAH,080H,000H,000H,000H,000H,000H,000H,005H,055H,055H,000H,000H,000H,000H 135 | DB 000H,000H,000H,002H,0AAH,0AAH,000H,000H,000H,000H,000H,000H,000H,001H,055H,054H 136 | DB 000H,000H,000H,000H,000H,000H,000H,000H,0AAH,0A8H,000H,000H,000H,000H,000H,000H 137 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 138 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 139 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 140 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 141 | data7 ends 142 | data8 segment 143 | ;-- 调入了一幅图像:这是您新建的图像 -- 144 | ;-- 宽度x高度=80x25 -- 145 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 146 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 147 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 148 | DB 000H,000H,000H,000H,000H,001H,055H,054H,000H,000H,000H,000H,000H,000H,000H,002H 149 | DB 0AAH,0AAH,000H,000H,000H,000H,000H,000H,000H,005H,055H,055H,000H,000H,000H,000H 150 | DB 000H,000H,000H,00AH,0AAH,0AAH,080H,000H,000H,000H,000H,000H,000H,015H,055H,055H 151 | DB 040H,000H,000H,000H,000H,000H,000H,02AH,0AAH,0AAH,0A0H,000H,000H,000H,000H,000H 152 | DB 000H,055H,055H,055H,050H,000H,000H,000H,000H,000H,000H,0AAH,0AAH,0AAH,0A8H,000H 153 | DB 000H,000H,000H,000H,000H,055H,055H,055H,050H,000H,000H,000H,000H,000H,000H,02AH 154 | DB 0AAH,0AAH,0A0H,000H,000H,000H,000H,000H,000H,015H,055H,055H,040H,000H,000H,000H 155 | DB 000H,000H,000H,00AH,0AAH,0AAH,080H,000H,000H,000H,000H,000H,000H,005H,055H,055H 156 | DB 000H,000H,000H,000H,000H,000H,000H,002H,0AAH,0AAH,000H,000H,000H,000H,000H,000H 157 | DB 000H,001H,055H,054H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 158 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 159 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 160 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 161 | data8 ends 162 | data9 segment 163 | ;-- 调入了一幅图像:这是您新建的图像 -- 164 | ;-- 宽度x高度=80x25 -- 165 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 166 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 167 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,002H,0AAH,0AAH,000H,000H 168 | DB 000H,000H,000H,000H,000H,005H,055H,055H,000H,000H,000H,000H,000H,000H,000H,00AH 169 | DB 0AAH,0AAH,080H,000H,000H,000H,000H,000H,000H,015H,055H,055H,040H,000H,000H,000H 170 | DB 000H,000H,000H,02AH,0AAH,0AAH,0A0H,000H,000H,000H,000H,000H,000H,055H,055H,055H 171 | DB 050H,000H,000H,000H,000H,000H,000H,0AAH,0AAH,0AAH,0A8H,000H,000H,000H,000H,000H 172 | DB 001H,055H,055H,055H,054H,000H,000H,000H,000H,000H,002H,0AAH,0AAH,0AAH,0AAH,000H 173 | DB 000H,000H,000H,000H,001H,055H,055H,055H,054H,000H,000H,000H,000H,000H,000H,0AAH 174 | DB 0AAH,0AAH,0A8H,000H,000H,000H,000H,000H,000H,055H,055H,055H,050H,000H,000H,000H 175 | DB 000H,000H,000H,02AH,0AAH,0AAH,0A0H,000H,000H,000H,000H,000H,000H,015H,055H,055H 176 | DB 040H,000H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,080H,000H,000H,000H,000H,000H 177 | DB 000H,005H,055H,055H,000H,000H,000H,000H,000H,000H,000H,002H,0AAH,0AAH,000H,000H 178 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 179 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 180 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 181 | data9 ends 182 | data10 segment 183 | ;-- 调入了一幅图像:这是您新建的图像 -- 184 | ;-- 宽度x高度=80x25 -- 185 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 186 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 187 | DB 000H,005H,055H,055H,000H,000H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,080H,000H 188 | DB 000H,000H,000H,000H,000H,015H,055H,055H,040H,000H,000H,000H,000H,000H,000H,02AH 189 | DB 0AAH,0AAH,0A0H,000H,000H,000H,000H,000H,000H,055H,055H,055H,050H,000H,000H,000H 190 | DB 000H,000H,000H,0AAH,0AAH,0AAH,0A8H,000H,000H,000H,000H,000H,001H,055H,055H,055H 191 | DB 054H,000H,000H,000H,000H,000H,002H,0AAH,0AAH,0AAH,0AAH,000H,000H,000H,000H,000H 192 | DB 005H,055H,055H,055H,055H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,0AAH,0AAH,080H 193 | DB 000H,000H,000H,000H,005H,055H,055H,055H,055H,000H,000H,000H,000H,000H,002H,0AAH 194 | DB 0AAH,0AAH,0AAH,000H,000H,000H,000H,000H,001H,055H,055H,055H,054H,000H,000H,000H 195 | DB 000H,000H,000H,0AAH,0AAH,0AAH,0A8H,000H,000H,000H,000H,000H,000H,055H,055H,055H 196 | DB 050H,000H,000H,000H,000H,000H,000H,02AH,0AAH,0AAH,0A0H,000H,000H,000H,000H,000H 197 | DB 000H,015H,055H,055H,040H,000H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,080H,000H 198 | DB 000H,000H,000H,000H,000H,005H,055H,055H,000H,000H,000H,000H,000H,000H,000H,000H 199 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 200 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 201 | data10 ends 202 | data11 segment 203 | ;-- 调入了一幅图像:这是您新建的图像 -- 204 | ;-- 宽度x高度=80x25 -- 205 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 206 | DB 000H,000H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,080H,000H,000H,000H,000H,000H 207 | DB 000H,015H,055H,055H,040H,000H,000H,000H,000H,000H,000H,02AH,0AAH,0AAH,0A0H,000H 208 | DB 000H,000H,000H,000H,000H,055H,055H,055H,050H,000H,000H,000H,000H,000H,000H,0AAH 209 | DB 0AAH,0AAH,0A8H,000H,000H,000H,000H,000H,001H,055H,055H,055H,054H,000H,000H,000H 210 | DB 000H,000H,002H,0AAH,0AAH,0AAH,0AAH,000H,000H,000H,000H,000H,005H,055H,055H,055H 211 | DB 055H,000H,000H,000H,000H,000H,00AH,0AAH,0AAH,0AAH,0AAH,080H,000H,000H,000H,000H 212 | DB 015H,055H,055H,055H,055H,040H,000H,000H,000H,000H,02AH,0AAH,0AAH,0AAH,0AAH,0A0H 213 | DB 000H,000H,000H,000H,015H,055H,055H,055H,055H,040H,000H,000H,000H,000H,00AH,0AAH 214 | DB 0AAH,0AAH,0AAH,080H,000H,000H,000H,000H,005H,055H,055H,055H,055H,000H,000H,000H 215 | DB 000H,000H,002H,0AAH,0AAH,0AAH,0AAH,000H,000H,000H,000H,000H,001H,055H,055H,055H 216 | DB 054H,000H,000H,000H,000H,000H,000H,0AAH,0AAH,0AAH,0A8H,000H,000H,000H,000H,000H 217 | DB 000H,055H,055H,055H,050H,000H,000H,000H,000H,000H,000H,02AH,0AAH,0AAH,0A0H,000H 218 | DB 000H,000H,000H,000H,000H,015H,055H,055H,040H,000H,000H,000H,000H,000H,000H,00AH 219 | DB 0AAH,0AAH,080H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 220 | DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H 221 | data11 ends 222 | code segment 223 | start: 224 | mov ax,0b800h 225 | mov es,ax ;显存段地址 226 | mov ax,data1 227 | mov ds,ax ;点阵数据源 228 | 229 | mov cx,10 230 | s4: 231 | push cx 232 | mov bh,cl ;黑底红字 233 | mov bl,'*' ;星形 234 | 235 | mov cx,10 236 | mov ax,0 237 | s3: 238 | push cx 239 | push ax 240 | call draw 241 | call deny 242 | pop ax 243 | pop cx 244 | inc ax 245 | loop s3 246 | 247 | pop cx 248 | loop s4 249 | 250 | mov ax,4c00h 251 | int 21h 252 | 253 | ;子程序 254 | ;参数: (ax)=六边形边长-1 255 | draw: 256 | mov dx,256d 257 | mul dx 258 | mov si,ax 259 | mov al,ds:[si] 260 | mov ah,0 ;用ax存点阵 261 | mov di,0 262 | mov cx,250 263 | read: 264 | push cx 265 | inc si 266 | mov al,ds:[si] 267 | mov ah,0 ;用ax存点阵 268 | 269 | ;16进制转化为2进制,并入栈存储 270 | mov cx,8 271 | s0: mov dl,2 272 | div dl 273 | mov dl,al ;商暂存于dl中 274 | mov al,0 275 | push ax ;余数入栈 276 | mov al,dl ;上次除法的商恢复到ax中 277 | loop s0 278 | 279 | ;写入显存 280 | mov cx,8 281 | s1: 282 | pop ax 283 | cmp ah,1 284 | jne next 285 | mov es:[di],bx 286 | next: 287 | add di,2 288 | loop s1 289 | 290 | pop cx 291 | loop read 292 | 293 | ;返回 294 | ok: 295 | ret 296 | 297 | ;子程序 298 | deny: 299 | push cx 300 | mov cx,0ffh 301 | run1: 302 | push cx 303 | mov cx,08ffh 304 | run2: 305 | loop run2 306 | pop cx 307 | loop run1 308 | pop cx 309 | 310 | ret 311 | 312 | code ends 313 | end start -------------------------------------------------------------------------------- /08.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | db 'Welcome to the world assembly !' 4 | data ends 5 | code segment 6 | start: 7 | mov cx,10 8 | s5: 9 | push cx 10 | mov ax,0b800h 11 | mov es,ax 12 | mov di,1970 ;di指向目的串首地址 13 | mov ax,data 14 | mov ds,ax 15 | mov si,0 ;si指向源串首址 16 | mov cx,31 ;字节串长31送cx 17 | 18 | MOV AX, 7 ;产生从1到AX之间的随机数 19 | MOV DX, 41H ;用端口41H 20 | OUT DX, AX ;有这句话后,我发现就可以产生从1到AX之间的随机数了 21 | IN AL, DX ;产生的随机数AL 22 | add al,1 23 | mov ah,al ;字符串颜色 24 | 25 | ;显示'Welcome to the world assembly !' 26 | s1: 27 | mov al,ds:[si] 28 | mov es:[di],al 29 | mov es:[di+1],ah 30 | inc si 31 | inc di 32 | inc di 33 | loop s1 34 | 35 | ;显示烟花 36 | ;mov ax,0b800h 37 | ;mov es,ax 38 | ;mov di,160*7+50 39 | push ax 40 | push dx 41 | MOV AX, 24 ;产生从1到AX之间的随机数 42 | MOV DX, 41H ;用端口41H 43 | OUT DX, AX ;有这句话后,我发现就可以产生从1到AX之间的随机数了 44 | IN AL, DX ;产生的随机数AL 45 | pop dx 46 | mov dh,al 47 | push dx 48 | MOV AX, 74 ;产生从1到AX之间的随机数 49 | MOV DX, 41H ;用端口41H 50 | OUT DX, AX ;有这句话后,我发现就可以产生从1到AX之间的随机数了 51 | IN AL, DX ;产生的随机数AL 52 | pop dx 53 | mov dl,al 54 | pop ax 55 | mov al,2 56 | call track 57 | call fire 58 | mov ah,0b 59 | call fire 60 | 61 | pop cx 62 | loop s5 63 | ;程序结束 64 | call over 65 | 66 | ;程序结束 67 | over: 68 | mov ax,4c00h 69 | int 21h 70 | 71 | ;子程序“fire” 72 | ;功能:显示烟花爆炸的效果 73 | ;参数: dh烟花中心位置行号 74 | ; dl烟花中心位置列号 75 | ; al烟花大小 76 | ; ah烟花颜色 77 | fire: 78 | mov bl,'*' 79 | mov bh,ah 80 | mov cl,al 81 | mov ch,0 82 | mov al,1 83 | 84 | mov es:[di],bx ;绘制烟花中心点 85 | s4: 86 | push cx 87 | mov cl,al 88 | mov ch,0 89 | call s2 90 | inc al 91 | call delay 92 | pop cx 93 | loop s4 94 | ret 95 | 96 | s2: 97 | push di ;绘制烟花水平左 98 | sub di,cx 99 | sub di,cx 100 | mov es:[di],bx 101 | pop di 102 | 103 | push di ;绘制烟花水平右 104 | add di,cx 105 | add di,cx 106 | mov es:[di],bx 107 | pop di 108 | 109 | push di ;左上 110 | push ax 111 | mov ax,162 112 | mul cl 113 | sub di,ax 114 | mov es:[di],bx 115 | pop ax 116 | pop di 117 | 118 | push di ;左下 119 | push ax 120 | mov ax,158 121 | mul cl 122 | add di,ax 123 | mov es:[di],bx 124 | pop ax 125 | pop di 126 | 127 | push di ;右上 128 | push ax 129 | mov ax,158 130 | mul cl 131 | sub di,ax 132 | mov es:[di],bx 133 | pop ax 134 | pop di 135 | 136 | 137 | push di ;右下 138 | push ax 139 | mov ax,162 140 | mul cl 141 | add di,ax 142 | mov es:[di],bx 143 | pop ax 144 | pop di 145 | 146 | ret 147 | 148 | ;子程序“track” 149 | ;功能:显示烟花上升的轨迹 150 | ;参数: es:di烟花中心位置地址 151 | track: 152 | push ax ;计算di=160dh+2dl 153 | push dx 154 | mov ax,160 155 | mul dh 156 | mov dh,0 157 | add ax,dx 158 | add ax,dx 159 | mov di,ax 160 | pop dx 161 | pop ax 162 | 163 | push ax 164 | push dx 165 | push di 166 | mov bl,'*' 167 | mov bh,ah 168 | mov dl,25 169 | sub dl,dh 170 | mov ax,160 171 | mul dl 172 | add di,ax 173 | mov cl,dl 174 | mov ch,0 175 | s3: push es:[di] 176 | mov es:[di],bx 177 | call delay 178 | pop es:[di] 179 | sub di,160 180 | loop s3 181 | pop di 182 | pop dx 183 | pop ax 184 | 185 | ret 186 | 187 | ;子程序“delay” 188 | ;功能:延时 189 | delay: 190 | push cx 191 | mov cx,0ffffh 192 | run1: 193 | push cx 194 | mov cx,0ffh 195 | run2: 196 | loop run2 197 | pop cx 198 | loop run1 199 | pop cx 200 | 201 | ret 202 | 203 | 204 | code ends 205 | end start -------------------------------------------------------------------------------- /09.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | 3 | code segment 4 | ;程序开始 5 | start: 6 | mov ax,0b800h 7 | mov es,ax 8 | mov di,2000 ;es:[di]指向显示器中央 9 | 10 | mov dl,5 ;矩形半宽度 11 | mov dh,12 ;矩形半高度 12 | mov bl,'a' ;上下边字符 13 | mov bh,001b ;颜色 14 | mov cx,8 15 | s3: 16 | push cx 17 | 18 | push dx 19 | push bx 20 | 21 | mov cl,dh 22 | add cl,1 23 | mov ch,0 24 | s5: 25 | push cx 26 | push bx 27 | 28 | call rectangle ;绘制矩形 29 | call delay 30 | mov bh,0b 31 | call rectangle ;擦除矩形 32 | 33 | dec dh 34 | pop bx 35 | pop cx 36 | loop s5 37 | 38 | pop bx 39 | pop dx 40 | 41 | add dl,10 ;加长 42 | add bl,1 43 | add bh,1 44 | 45 | push dx 46 | push bx 47 | 48 | mov cl,dh 49 | add cl,1 50 | mov ch,0 51 | mov dh,0 52 | s6: 53 | push cx 54 | push bx 55 | call rectangle ;绘制矩形 56 | call delay 57 | mov bh,0b 58 | call rectangle ;擦除矩形 59 | 60 | inc dh 61 | pop bx 62 | pop cx 63 | loop s6 64 | 65 | pop bx 66 | pop dx 67 | pop cx 68 | loop s3 69 | 70 | ;程序结束 71 | call over 72 | 73 | 74 | ;程序结束 75 | over: 76 | mov ax,4c00h 77 | int 21h 78 | 79 | ;子程序返回 80 | back: 81 | ret 82 | 83 | ;子程序“rectangle” 84 | ;功能:绘制矩形 85 | ;参数: es:[di]指向显示器中央 86 | ; dl矩形半宽度 87 | ; dh矩形半高度 88 | ; bl上下边字符 89 | ; bh左上颜色 90 | rectangle: 91 | mov al,dl 92 | mov ah,0 93 | mov cl,40 94 | div cl 95 | mov dl,ah 96 | 97 | ;绘制矩形左右边 98 | mov cl,dh 99 | add cl,1 100 | mov ch,0 101 | push di 102 | mov al,dl 103 | mov ah,0 104 | sub di,ax 105 | sub di,ax 106 | mov al,'\' 107 | mov ah,bh 108 | mov es:[di],ax 109 | pop di 110 | push di 111 | mov al,dl 112 | mov ah,0 113 | add di,ax 114 | add di,ax 115 | mov al,'/' 116 | mov ah,bh 117 | mov es:[di],ax 118 | pop di 119 | s2: 120 | push cx 121 | dec cx 122 | push di ;左上 123 | mov al,dl 124 | mov ah,0 125 | sub di,ax 126 | sub di,ax 127 | mov al,160 128 | mov ah,0 129 | mul cl 130 | sub di,ax 131 | mov al,'\' 132 | mov ah,bh 133 | mov es:[di],ax 134 | pop di 135 | 136 | push di ;左下 137 | mov al,dl 138 | mov ah,0 139 | sub di,ax 140 | sub di,ax 141 | mov al,160 142 | mov ah,0 143 | mul cl 144 | add di,ax 145 | mov al,'\' 146 | mov ah,bh 147 | mov es:[di],ax 148 | pop di 149 | 150 | push di ;右上 151 | mov al,dl 152 | mov ah,0 153 | add di,ax 154 | add di,ax 155 | mov al,160 156 | mov ah,0 157 | mul cl 158 | sub di,ax 159 | mov al,'/' 160 | mov ah,bh 161 | jz s7 162 | add ah,1 163 | s7: 164 | mov es:[di],ax 165 | pop di 166 | 167 | push di ;右下 168 | mov al,dl 169 | mov ah,0 170 | add di,ax 171 | add di,ax 172 | mov al,160 173 | mov ah,0 174 | mul cl 175 | add di,ax 176 | mov al,'/' 177 | mov ah,bh 178 | jz s8 179 | add ah,1 180 | s8: 181 | mov es:[di],ax 182 | pop di 183 | 184 | pop cx 185 | loop s2 186 | 187 | ;绘制矩形上下边 188 | mov cl,dl 189 | mov ch,0 190 | push di 191 | mov al,160 192 | mov ah,0 193 | mul dh 194 | sub di,ax 195 | mov es:[di],bx 196 | pop di 197 | push di 198 | mov al,160 199 | mov ah,0 200 | mul dh 201 | add di,ax 202 | mov al,bl 203 | mov ah,bh 204 | cmp ah,0 205 | jnz s11 206 | mov ah,-1 207 | s11: 208 | add ah,1 209 | mov es:[di],ax 210 | pop di 211 | s1: 212 | push di ;左上 213 | sub di,cx 214 | sub di,cx 215 | mov al,160 216 | mov ah,0 217 | mul dh 218 | sub di,ax 219 | mov al,bl 220 | mov ah,bh 221 | mov es:[di],ax 222 | pop di 223 | 224 | push di ;右上 225 | add di,cx 226 | add di,cx 227 | mov al,160 228 | mov ah,0 229 | mul dh 230 | sub di,ax 231 | mov al,bl 232 | mov ah,bh 233 | mov es:[di],ax 234 | pop di 235 | 236 | push di ;右下 237 | add di,cx 238 | add di,cx 239 | mov al,160 240 | mov ah,0 241 | mul dh 242 | add di,ax 243 | mov al,bl 244 | mov ah,bh 245 | cmp ah,0 246 | jnz s9 247 | mov ah,-1 248 | s9: 249 | add ah,1 250 | mov es:[di],ax 251 | pop di 252 | 253 | push di ;左下 254 | sub di,cx 255 | sub di,cx 256 | mov al,160 257 | mov ah,0 258 | mul dh 259 | add di,ax 260 | mov al,bl 261 | mov ah,bh 262 | cmp ah,0 263 | jnz s10 264 | mov ah,-1 265 | s10: 266 | add ah,1 267 | mov es:[di],ax 268 | pop di 269 | 270 | loop s1 271 | 272 | ret 273 | 274 | ;子程序“delay” 275 | ;功能:延时 276 | delay: 277 | push cx 278 | mov cx,0ffh 279 | run1: 280 | push cx 281 | mov cx,0affh 282 | run2: 283 | loop run2 284 | pop cx 285 | loop run1 286 | pop cx 287 | ret 288 | 289 | code ends 290 | end start -------------------------------------------------------------------------------- /10.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | dw 1 dup (80) 4 | dw 7 dup (156) 5 | dw 6 dup (4) 6 | dw 10 dup (156) 7 | dw 10 dup (4) 8 | dw 7 dup (160) 9 | dw 3 dup (4) 10 | dw 7 dup (-160) 11 | dw 10 dup (4) 12 | dw 10 dup (-164) 13 | dw 6 dup (4) 14 | dw 7 dup (-164) 15 | data ends 16 | code segment 17 | ;程序开始 18 | start: 19 | mov ax,0b800h 20 | mov es,ax ;显存段地址 21 | 22 | mov cx,25 23 | mov dh,0 24 | mov di,0 25 | s2: 26 | call letter 27 | ;add di,160 28 | call delay 29 | loop s2 30 | 31 | 32 | mov ax,data 33 | mov ds,ax ;点阵数据源 34 | call draw 35 | 36 | call over 37 | 38 | ;程序结束 39 | over: 40 | mov ax,4c00h 41 | int 21h 42 | 43 | ;子程序“letter” 44 | ;功能:绘制字母 45 | ;参数: es:[dh]指向显示行 46 | letter: 47 | push cx 48 | push dx 49 | 50 | mov bl,'A' 51 | mov bh,010b 52 | mov cx,20 53 | s1: 54 | mov es:[di],bx 55 | add bl,2 56 | add di,8 57 | loop s1 58 | 59 | mov bl,'B' 60 | mov bh,010b 61 | mov cx,20 62 | mov ax,4000 63 | sub ax,di 64 | mov si,ax 65 | add si,4 66 | s3: 67 | mov es:[si],bx 68 | add bl,2 69 | add si,8 70 | loop s3 71 | 72 | pop dx 73 | pop cx 74 | ret 75 | 76 | ;子程序 77 | ;参数:无 78 | draw: 79 | mov si,0 80 | mov di,0 81 | mov cx,84 82 | mov bl,1 83 | 84 | s4: mov ax,ds:[si] 85 | add di,ax 86 | 87 | MOV AX, 256 ;产生从1到AX之间的随机数 88 | MOV DX, 41H ;用端口41H 89 | OUT DX, AX ;有这句话后,我发现就可以产生从1到AX之间的随机数了 90 | IN AL, DX ;产生的随机数AL 91 | add al,20 92 | mov bh,al 93 | mov es:[di],bx 94 | add si,2 95 | call delay 96 | loop s4 97 | 98 | ret 99 | 100 | 101 | ;子程序“delay” 102 | ;功能:延时 103 | delay: 104 | push cx 105 | mov cx,0ffh 106 | run1: 107 | push cx 108 | mov cx,08ffh 109 | run2: 110 | loop run2 111 | pop cx 112 | loop run1 113 | pop cx 114 | ret 115 | 116 | code ends 117 | end start -------------------------------------------------------------------------------- /11.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | db 0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0 4 | db 0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0 5 | db 0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0 6 | db 0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0 7 | db 0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0 8 | db 1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0 9 | db 1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0 10 | db 1,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0,0 11 | db 1,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0 12 | db 1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0 13 | db 1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0 14 | db 1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0 15 | db 1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0 16 | db 1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0 17 | db 1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,1,1,0 18 | db 0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0 19 | db 0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0 20 | db 0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0 21 | db 0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,0 22 | db 0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,0 23 | db 0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0 24 | db 0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0 25 | db 0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0 26 | db 0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0 27 | db 0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0 28 | data ends 29 | code segment 30 | start: 31 | mov ax,data 32 | mov ds,ax 33 | mov ax,0b800h 34 | mov es,ax 35 | mov di,0 36 | mov cx,25 37 | mov bx,0 38 | mov bp,0 39 | s0: 40 | push cx 41 | mov cx,40 42 | s1: 43 | mov al,ds:[bp] 44 | cmp al,0 45 | je pass 46 | mov byte ptr es:[di],bl 47 | mov byte ptr es:[di+1],0ah 48 | mov byte ptr es:[di+78],bh 49 | mov byte ptr es:[di+79],0ah 50 | add bx,0101h 51 | pass:;mov byte ptr es:[di],' ' 52 | ;mov byte ptr es:[di+78],' ' 53 | inc bp 54 | add di,2 55 | loop s1 56 | 57 | add di,80 58 | pop cx 59 | loop s0 60 | 61 | mov cx,65535 62 | run_rain: 63 | call move_rain 64 | call delay_time 65 | loop run_rain 66 | 67 | mov ax,4c00h 68 | int 21h 69 | ;;;;;;;;;;;;;;;;;;;;;;; 70 | move_rain: 71 | push dx 72 | push cx 73 | push bx 74 | push ax 75 | push di 76 | mov di,0f9eh 77 | mov bx,0 78 | mov cx,25 79 | move_s0: 80 | push cx 81 | mov cx,80 82 | move_s1: 83 | mov al,ds:[di] 84 | cmp al,20h 85 | je move_pass 86 | mov bx,es:[di] 87 | mov word ptr es:[di],0020h 88 | mov es:[di+160],bx 89 | move_pass: 90 | sub di,2 91 | loop move_s1 92 | pop cx 93 | loop move_s0 94 | 95 | mov cx,80 96 | first_line: 97 | mov bx,es:[di+4000] 98 | mov word ptr es:[di+4000],0020h 99 | mov es:[di],bx 100 | add di,2 101 | loop first_line 102 | move_ok: pop di 103 | pop ax 104 | pop bx 105 | pop cx 106 | pop dx 107 | ret 108 | ;;;;;;;延时函数;;;;; 109 | delay_time: 110 | push cx 111 | mov cx,0ffh 112 | run1: 113 | push cx 114 | mov cx,0ffh 115 | run2: 116 | loop run2 117 | pop cx 118 | loop run1 119 | pop cx 120 | ret 121 | ret 122 | 123 | code ends 124 | end start -------------------------------------------------------------------------------- /12.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | code segment 3 | num dw ' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9','10','11','12','13','14','15','16' 4 | off dw -160*3,4, 8,4, 8,4, 8,4, 8,4, 160*3,4, 160*3,4, 160*3,4, 160*3,4, -8,4, -8,4, -8,4, -8,4, -160*3,4, -160*3,4, -160*3,-15*4 5 | start: 6 | mov al,16 ;总人数N=16 7 | mov ah,5 ;开始报数M=5 8 | mov bl,4 ;每隔K=4去掉一人 9 | 10 | call draw ;绘制初始界面 11 | 12 | call circle ;选人过程 13 | 14 | mov ax,4c00h 15 | int 21h 16 | 17 | ;子程序:绘制初始界面 18 | draw: 19 | push bx 20 | push cx 21 | push dx 22 | mov dh,00100111b 23 | 24 | push ax 25 | mov ax,0b800h 26 | mov es,ax 27 | mov di,160*3+34 ;es:[di]指向屏幕位置 28 | pop ax 29 | 30 | push ax 31 | mov byte ptr es:[di],'N' 32 | mov byte ptr es:[di+1],dh 33 | add di,2 34 | mov byte ptr es:[di],'=' 35 | mov byte ptr es:[di+1],dh 36 | add di,2 37 | mov ah,dh 38 | call draw_num 39 | pop ax 40 | 41 | mov cx,4 42 | draw_1: 43 | mov es:[di+1],dh 44 | add di,2 45 | loop draw_1 46 | 47 | push ax 48 | mov byte ptr es:[di],'M' 49 | mov byte ptr es:[di+1],dh 50 | add di,2 51 | mov byte ptr es:[di],'=' 52 | mov byte ptr es:[di+1],dh 53 | add di,2 54 | mov al,ah 55 | mov ah,dh 56 | call draw_num 57 | pop ax 58 | 59 | mov cx,4 60 | draw_2: 61 | mov es:[di+1],dh 62 | add di,2 63 | loop draw_2 64 | 65 | push ax 66 | mov byte ptr es:[di],'K' 67 | mov byte ptr es:[di+1],dh 68 | add di,2 69 | mov byte ptr es:[di],'=' 70 | mov byte ptr es:[di+1],dh 71 | add di,2 72 | mov al,bl 73 | mov ah,dh 74 | call draw_num 75 | pop ax 76 | 77 | push ax 78 | mov cx,16 79 | mov si,0 80 | mov dh,10b 81 | mov di,160*7+34 82 | draw_3: 83 | push si 84 | push bx 85 | mov ax,si 86 | mov bl,2 87 | mul bl 88 | mov ah,0 89 | mov si,ax 90 | mov ax,off[si] 91 | add di,ax 92 | pop bx 93 | pop si 94 | mov ax,num[si] 95 | mov es:[di],ah 96 | mov es:[di+1],dh 97 | mov es:[di+2],al 98 | mov es:[di+3],dh 99 | add si,2 100 | loop draw_3 101 | pop ax 102 | 103 | pop dx 104 | pop cx 105 | pop bx 106 | 107 | ret 108 | 109 | ;选人过程 110 | circle: 111 | mov di,160*4+66 ;es:[di]指向屏幕位置 112 | mov si,1;标志1/2/3/4 113 | mov bx,20 114 | circle_1: 115 | add di,off[bx] 116 | cmp byte ptr es:[di+1],1b 117 | je circle_3 118 | cmp cx,di 119 | je circle_ret 120 | or byte ptr es:[di+1],10000000b 121 | or byte ptr es:[di+3],10000000b 122 | call delay 123 | cmp si,4 124 | jne circle_2 125 | mov si,0 126 | mov byte ptr es:[di+1],1b 127 | mov byte ptr es:[di+3],1b 128 | circle_2: 129 | add si,1 130 | and byte ptr es:[di+1],01111111b 131 | and byte ptr es:[di+3],01111111b 132 | mov cx,di 133 | circle_3: 134 | push di 135 | mov di,160*10+52 136 | mov ax,si 137 | add al,30h 138 | mov es:[di],al 139 | mov byte ptr es:[di+1],10b 140 | pop di 141 | add bx,off[bx+2] 142 | jmp circle_1 143 | circle_ret: 144 | ret 145 | 146 | 147 | ;延时 148 | delay: 149 | push cx 150 | mov cx,03fffh 151 | run1: 152 | push cx 153 | mov cx,0fffh 154 | run2: 155 | loop run2 156 | pop cx 157 | loop run1 158 | pop cx 159 | ret 160 | 161 | ;子程序:打印数字值 162 | ;参数: al需要打印的数 163 | ; ah字体颜色 164 | ; es:[di]指向打印位置 165 | draw_num: 166 | push ax 167 | push bx 168 | push cx 169 | push dx 170 | mov bh,ah 171 | mov bl,10 172 | mov cx,0 173 | draw_num_1: 174 | mov ah,0 175 | div bl 176 | mov dl,ah 177 | add dl,30h 178 | mov dh,0 179 | push dx 180 | inc cx 181 | cmp al,0 182 | jnz draw_num_1 183 | draw_num_2: 184 | pop ax 185 | mov es:[di],al 186 | mov es:[di+1],bh 187 | add di,2 188 | loop draw_num_2 189 | pop dx 190 | pop cx 191 | pop bx 192 | pop ax 193 | ret 194 | 195 | code ends 196 | end start -------------------------------------------------------------------------------- /13.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | dw 201,2, 205,2, 205,2, 205,2, 205,2, 187,160-10, 186,10, 186,160-10 4 | dw 8 dup (204,2, 205,2, 205,2, 205,2, 205,2, 185,160-10, 186,10, 186,160-10) 5 | dw 200,2, 205,2, 205,2, 205,2, 205,2, 188,160-10 6 | dw '$' 7 | data ends 8 | code segment 9 | start: 10 | mov ax,0b800h 11 | mov es,ax 12 | mov di,160*3+64 13 | mov ax,data 14 | mov ds,ax 15 | mov si,0 16 | 17 | call draw 18 | 19 | mov di,160*4+68 20 | mov cx,9 21 | s1: 22 | call num 23 | mov ah,1b 24 | call draw_num 25 | add di,160*2 26 | loop s1 27 | 28 | mov cx,8 29 | s2: 30 | call sort 31 | loop s2 32 | 33 | mov di,160*20+62 34 | mov byte ptr es:[di+6+1],100b 35 | mov byte ptr es:[di+8+1],100b 36 | 37 | over: 38 | mov ax,4c00h 39 | int 21h 40 | 41 | ;绘制图框 42 | draw: 43 | draw_start: 44 | cmp word ptr ds:[si],'$' 45 | je draw_ret 46 | mov ax,ds:[si] 47 | mov es:[di],al 48 | mov byte ptr es:[di+1],10b 49 | add di,ds:[si+2] 50 | add si,4 51 | jmp draw_start 52 | draw_ret: 53 | ret 54 | 55 | ;生成随机数al 56 | num: 57 | MOV AX, 90 ;产生从1到AX之间的随机数 58 | MOV DX, 41H ;用端口41H 59 | OUT DX, AX ;有这句话后,我发现就可以产生从1到AX之间的随机数了 60 | IN AL, DX ;产生的随机数AL 61 | ADD AL,9 62 | ret 63 | 64 | ;子程序:打印数字值 65 | ;参数: al需要打印的数 66 | ; ah字体颜色 67 | ; es:[di]指向打印位置 68 | draw_num: 69 | push ax 70 | push bx 71 | push cx 72 | push dx 73 | push di 74 | mov bh,ah 75 | mov bl,10 76 | mov cx,0 77 | draw_num_1: 78 | mov ah,0 79 | div bl 80 | mov dl,ah 81 | add dl,30h 82 | mov dh,0 83 | push dx 84 | inc cx 85 | cmp al,0 86 | jnz draw_num_1 87 | draw_num_2: 88 | pop ax 89 | mov es:[di],al 90 | mov es:[di+1],bh 91 | add di,2 92 | loop draw_num_2 93 | pop di 94 | pop dx 95 | pop cx 96 | pop bx 97 | pop ax 98 | ret 99 | 100 | ;延时 101 | delay: 102 | push cx 103 | mov cx,03fffh 104 | run1: 105 | push cx 106 | mov cx,0fffh 107 | run2: 108 | loop run2 109 | pop cx 110 | loop run1 111 | pop cx 112 | ret 113 | 114 | ;子程序:排序 115 | ;参数: 116 | sort: 117 | push cx 118 | mov di,160*20+62 119 | mov cx,0 120 | sort_4: 121 | push cx 122 | mov byte ptr es:[di],16 123 | mov byte ptr es:[di+1],100b 124 | mov byte ptr es:[di+7],100b 125 | mov byte ptr es:[di+9],100b 126 | 127 | mov bl,10 128 | mov al,es:[di+6] 129 | sub al,30h 130 | mul bl 131 | add al,es:[di+8] 132 | sub al,30h 133 | mov cl,al 134 | mov al,es:[di+6-2*160] 135 | sub al,30h 136 | mul bl 137 | add al,es:[di+8-2*160] 138 | sub al,30h 139 | mov ch,al 140 | 141 | cmp ch,cl 142 | jna sort_2 143 | mov byte ptr es:[di+14-160],62 144 | mov byte ptr es:[di+14-160+1],100b 145 | call delay 146 | mov byte ptr es:[di+14-160],0 147 | push cx 148 | mov cx,7 149 | mov bx,0 150 | sort_5: 151 | mov ax,es:[di+bx] 152 | mov dx,es:[di+bx-160*2] 153 | mov es:[di+bx],dx 154 | mov es:[di+bx-160*2],ax 155 | add bx,2 156 | loop sort_5 157 | pop cx 158 | jmp sort_3 159 | sort_2: 160 | mov byte ptr es:[di+14-160],60 161 | mov byte ptr es:[di+14-160+1],100b 162 | call delay 163 | sort_3: 164 | mov byte ptr es:[di+14-160],0 165 | mov byte ptr es:[di],0 166 | mov byte ptr es:[di+7],1b 167 | mov byte ptr es:[di+9],1b 168 | 169 | sub di,160*2 170 | pop cx 171 | add cx,1 172 | cmp cx,8 173 | je sort_over 174 | cmp byte ptr es:[di+7-2*160],100b 175 | je sort_over 176 | jmp sort_4 177 | sort_over: 178 | mov byte ptr es:[di],0 179 | pop cx 180 | ret 181 | 182 | code ends 183 | end start -------------------------------------------------------------------------------- /14.asm: -------------------------------------------------------------------------------- 1 | assume cs:code 2 | data segment 3 | db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 4 | db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 5 | db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 6 | db 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 7 | db 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 8 | db 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 9 | db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1 10 | db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1 11 | db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 12 | db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 13 | db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 14 | db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 15 | db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 16 | db 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 17 | db 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 18 | db 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1 19 | db 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1 20 | db 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1 21 | db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1 22 | db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1 23 | db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1 24 | db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1 25 | db 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1 26 | db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 27 | db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 28 | db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 29 | data ends 30 | code segment 31 | start: 32 | mov ax,data 33 | mov es,ax 34 | mov ax,0b800h 35 | mov ds,ax 36 | mov cx,26 37 | mov bx,0 38 | mov bp,0 39 | s: 40 | push cx 41 | mov di,0 42 | mov si,158 43 | mov cx,40 44 | s1: 45 | mov al,es:[bp] 46 | cmp al,0 47 | je lu 48 | mov word ptr ds:[bx+di],4020h 49 | mov word ptr ds:[bx+si],4020h 50 | jmp s_next 51 | lu:mov word ptr ds:[bx][di],0 52 | mov word ptr ds:[bx][si],0 53 | s_next:inc bp 54 | add di,2 55 | sub si,2 56 | loop s1 57 | add bx,160 58 | pop cx 59 | loop s 60 | 61 | mov word ptr ds:[160*15+158],0611h 62 | mov word ptr ds:[160*11+158],2241h 63 | mov dh,15 64 | mov dl,79 65 | mov di,160*15+158 66 | mov cx,800 67 | sss: 68 | call delay_time 69 | 70 | cmp byte ptr ds:[di],17 71 | je zuo_0 72 | 73 | cmp byte ptr ds:[di],16 74 | je you_0 75 | 76 | cmp byte ptr ds:[di],30 77 | je shang_0 78 | 79 | cmp byte ptr ds:[di],31 80 | je xia_0 81 | 82 | you_0:add di,2 83 | inc dl 84 | call right_go 85 | jmp sss_end 86 | 87 | shang_0:sub di,160 88 | dec dh 89 | call right_go 90 | jmp sss_end 91 | 92 | zuo_0:sub di,2 93 | dec dl 94 | call left_go 95 | jmp sss_end 96 | 97 | xia_0:add di,160 98 | inc dh 99 | call left_go 100 | jmp sss_end 101 | 102 | sss_end: 103 | 104 | loop sss 105 | 106 | finish: 107 | mov ax,4c00h 108 | int 21h 109 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;左走 110 | ;;;;;;;;右箭头=16;左箭头=17;上箭头=30;下箭头=31; 111 | left_go:;dh+dl=当前位置 112 | cmp byte ptr ds:[di],41h 113 | je finish 114 | 115 | sub di,160 116 | 117 | cmp dl,79 118 | je zuo_xia 119 | 120 | cmp word ptr ds:[di+162],0 121 | je you_1 122 | 123 | zuo_xia:cmp word ptr ds:[di+320],0 124 | je xia_1 125 | 126 | cmp dl,0 127 | je shang_1 128 | 129 | cmp word ptr ds:[di+158],0 130 | je zuo_1 131 | 132 | cmp word ptr ds:[di],0 133 | je shang_1 134 | 135 | jmp finish 136 | ;===========; 137 | you_1: 138 | mov ds:[di+160],0610h 139 | jmp left_ok_1 140 | 141 | xia_1: 142 | mov ds:[di+160],061fh 143 | jmp left_ok_1 144 | ;===========; 145 | zuo_1: 146 | mov ds:[di+160],0611h 147 | jmp left_ok_1 148 | 149 | shang_1:mov ds:[di+160],061eh 150 | jmp left_ok_1 151 | 152 | left_ok_1: add di,160 153 | ret 154 | ;;向右走;;;;;;;右箭头=16;左箭头=17;上箭头=30;下箭头=31; 155 | right_go: 156 | 157 | cmp byte ptr ds:[di],41h 158 | je finish 159 | sub di,160 160 | 161 | cmp dl,0 162 | je you_shang 163 | 164 | cmp word ptr ds:[di+158],0 165 | je zuo_2 166 | 167 | you_shang: cmp word ptr ds:[di],0 168 | je shang_2 169 | 170 | cmp dl,79 171 | je xia_2 172 | 173 | cmp word ptr ds:[di+162],0 174 | je you_2 175 | 176 | cmp word ptr ds:[di+320],0 177 | je xia_2 178 | 179 | jmp finish 180 | ;===========; 181 | you_2: 182 | mov ds:[di+160],0610h 183 | jmp left_ok_2 184 | 185 | xia_2: 186 | mov ds:[di+160],061fh 187 | jmp left_ok_2 188 | ;===========; 189 | zuo_2: 190 | mov ds:[di+160],0611h 191 | jmp left_ok_2 192 | 193 | shang_2:mov ds:[di+160],061eh 194 | jmp left_ok_2 195 | 196 | left_ok_2:add di,160 197 | 198 | ret 199 | ;;;;;;;;;;;;;;;;延时函数 200 | delay_time: 201 | push cx 202 | mov cx,0fffh 203 | dn1:push cx 204 | mov cx,0ffh 205 | dn2:loop dn2 206 | pop cx 207 | loop dn1 208 | pop cx 209 | ret 210 | 211 | code ends 212 | end start -------------------------------------------------------------------------------- /15-1.asm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/15-1.asm -------------------------------------------------------------------------------- /15.asm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/15.asm -------------------------------------------------------------------------------- /16.asm: -------------------------------------------------------------------------------- 1 | assume cs:code,ds:data 2 | data segment 3 | biaoti db 'String Matching','$' 4 | subste db 'Substr:___________________','$' 5 | string db 'String:',0ah,0dh,'$' 6 | tips db 'tips:',0ah,0dh 7 | db ' 1.Maximum length of substring is 10 .',0ah,0dh 8 | db ' 2.Enter = Begin to match ; Backspace = Deldte one char ; Esc = Quit .','$' 9 | match db 'This match is successful .','$' 10 | data ends 11 | code segment 12 | start: 13 | ;----------------------------------- 14 | ;绘制屏界面 15 | ;----------------------------------- 16 | ;清除屏幕 17 | mov al,00h 18 | mov ah,06h 19 | mov bh,20h 20 | mov cx,0000h 21 | mov dx,184fh 22 | int 10h 23 | mov al,00h 24 | mov ah,06h 25 | mov bh,07h 26 | mov cx,0101h 27 | mov dx,174eh 28 | int 10h 29 | 30 | ;设置光标位置 31 | mov ah,2 32 | mov bx,0 33 | mov dx,031eh 34 | int 10h 35 | ;将数据段送到dx 36 | mov ax,data 37 | mov ds,ax 38 | mov ah,09h 39 | mov dx,offset biaoti 40 | int 21h 41 | 42 | ;设置光标位置 43 | mov ah,2 44 | mov bx,0 45 | mov dx,0508h 46 | int 10h 47 | ;将数据段送到dx 48 | mov ax,data 49 | mov ds,ax 50 | mov ah,09h 51 | mov dx,offset subste 52 | int 21h 53 | 54 | ;设置光标位置 55 | mov ah,2 56 | mov bx,0 57 | mov dx,0708h 58 | int 10h 59 | ;将数据段送到dx 60 | mov ax,data 61 | mov ds,ax 62 | mov ah,09h 63 | mov dx,offset string 64 | int 21h 65 | 66 | ;设置光标位置 67 | mov ah,2 68 | mov bx,0 69 | mov dx,0121ah 70 | int 10h 71 | ;将数据段送到dx 72 | mov ax,data 73 | mov ds,ax 74 | mov ah,09h 75 | mov dx,offset match 76 | int 21h 77 | 78 | ;设置光标位置 79 | mov ah,2 80 | mov bx,0 81 | mov dx,1501h 82 | int 10h 83 | ;将数据段送到dx 84 | mov ax,data 85 | mov ds,ax 86 | mov ah,09h 87 | mov dx,offset tips 88 | int 21h 89 | 90 | ;----------------------------------- 91 | ;生成随机字母 92 | ;----------------------------------- 93 | ;设置光标位置 94 | mov ah,2 95 | mov bx,0 96 | mov dx,080fh 97 | int 10h 98 | mov cx,25 99 | s1: 100 | mov ax, 12h ;产生从1到ax之间的随机数 101 | mov dx, 41h ;用端口41h 102 | out dx, ax ;有这句话后,我发现就可以产生从1到ax之间的随机数了 103 | in al, dx ;产生的随机数al 104 | call delay 105 | add al,97 106 | ;输出字母 107 | mov ah,2 108 | mov dl,al 109 | int 21h 110 | mov ah,2 111 | mov dl,' ' 112 | int 21h 113 | loop s1 114 | 115 | ;设置光标位置 116 | mov ah,2 117 | mov bx,0 118 | mov dx,0b0fh 119 | int 10h 120 | mov cx,25 121 | s2: 122 | mov ax,36 ;产生从0到ax之间的随机数 123 | mov dx,41h ;用端口41h 124 | out dx,ax ;有这句话后,我发现就可以产生从1到ax之间的随机数了 125 | in al,dx ;产生的随机数al 126 | add al,97 127 | ;输出字母 128 | mov ah,2 129 | mov dl,al 130 | int 21h 131 | mov ah,2 132 | mov dl,' ' 133 | int 21h 134 | loop s2 135 | 136 | ;设置光标位置 137 | mov ah,2 138 | mov bx,0 139 | mov dx,0e0fh 140 | int 10h 141 | mov cx,25 142 | s3: 143 | mov ax,36 ;产生从0到ax之间的随机数 144 | mov dx,41h ;用端口41h 145 | out dx,ax ;有这句话后,我发现就可以产生从1到ax之间的随机数了 146 | in al,dx ;产生的随机数al 147 | add al,97 148 | ;输出字母 149 | mov ah,2 150 | mov dl,al 151 | int 21h 152 | mov ah,2 153 | mov dl,' ' 154 | int 21h 155 | loop s3 156 | 157 | mov ax,4c00h 158 | int 21h 159 | 160 | ;子程序“delay” 161 | ;功能:延时 162 | delay: 163 | push cx 164 | mov cx,04ffh 165 | run1: 166 | push cx 167 | mov cx,0ffh 168 | run2: 169 | loop run2 170 | pop cx 171 | loop run1 172 | pop cx 173 | 174 | ret 175 | 176 | code ends 177 | 178 | end start -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 汇编程序设计项目 2 | 3 | ## 程序设计项目1 4 | 5 | ```assembly 6 | data segment 7 | dw ? 8 | data ends 9 | end 10 | ``` 11 | 要求:只在定义的数据段‘?’中加入相关的内容,使得上面的程序可以在屏幕中间显示一个绿色的字符‘A’。 12 | 13 | ## 程序设计项目2 14 | 15 | 对字符串进行加密和解密。 16 | 17 | 算法设计:原字符串放在OriginalStr段,加密的字符串放在EncryStr段,解密的字符串放在DecryStr段。 18 | 19 | 加密方法:取OriginalStr段的每个字符的ASCII值与该字符后面的字符的ASCII值之和的一半。字符串的最后一个字符的加密方法为取该字符的ASCII值与20H之和的一半。(加密过程中的余数需要进行存储) 20 | 21 | 解密方法:根据加密方法自己设计解密方法,并实现。 22 | 23 | 实现要求:将OriginalStr段的数据按照加密方法进行加密,将加密后的数据放在EncryStr段;将EncryStr段的数据按照解密方法进行解密,将解密后的数据放在DecryStr段。然后把原字符串、加密之后的字符串以及解密之后的字符串分别以白底绿字、白底红字、白底蓝字方式显示到屏幕中间。 24 | 25 | ![demo2](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo2.png) 26 | 27 | 密文和明文的数据段定义如下: 28 | 29 | ```assembly 30 | OriginalStr segment 31 | db 'Hello world!' 32 | OriginalStr ends 33 | 34 | EncryStr segment 35 | db 2*12 dup (' ') 36 | EncryStr ends 37 | 38 | DecryStr segment 39 | db 12 dup (' ') 40 | DecryStr ends 41 | ``` 42 | 43 | ## 程序设计项目3 44 | 45 | 加、减、除三则运算。 46 | 47 | 要求: 48 | 49 | 1. 读取字符串的内容,判断第四个字符是‘+’、‘-’或‘/’,然后按照相应的符号进行运算,并把运算结果转换为字符串存放在等号后面,最后把算式显示到屏幕中间,白底蓝字。 50 | 2. 注意数字字符的ASCII与数字的对应关系,数字的数值加30H为这个数字的字符所对应的ASCII码。 51 | 3. 数据段定义如下: 52 | 53 | ```assembly 54 | Calculate segment 55 | db '1.3/1= ' 56 | db '2.5+3= ' 57 | db '3.9-3= ' 58 | db '4.4+5= ' 59 | Calculate ends 60 | ``` 61 | 62 | ## 程序设计项目4 63 | 64 | 编程计算x(x>2)的y(y>2)次方。使用两种方式实现: 65 | 66 | 1. 只使用add指令实现。 67 | 2. 只使用mul指令实现。 68 | 69 | 并将计算式显示在屏幕中央。 70 | 71 | 例如:计算4的3次方。在屏幕中央显示格式如下: 72 | 73 | ```assembly 74 | 4 75 | ^ 76 | 3 77 | ----- 78 | 64 79 | ``` 80 | 81 | 注意:结果不能超过16位寄存器可存储的最大值。 82 | 83 | ## 程序设计项目5 84 | 85 | 定义一个数据段如下: 86 | 87 | ```assembly 88 | data segment 89 | db 'h12E332l@L#O*&^!88nI@cE$% %$T1O m33E44E55t y77O88u!()' 90 | db '?' 91 | data ends 92 | ``` 93 | 94 | 注意:第一行字符串为待处理的数据,‘?’为字符串结束符号。 95 | 96 | 设计程序完成如下操作: 97 | 98 | 1. 去掉除字母、空格、‘!’之外的字符。 99 | 2. 通过内存间的数据交换,将数据段中的字符串修改为‘Hello!Nice to meet you!’。 100 | 3. 在屏幕正中打印处理好后的数据。 101 | 102 | 完成程序后思考: 103 | 104 | 1. 如何设计程序,程序代码量最少。 105 | 2. 如何设计程序,程序执行速度最快。 106 | 3. 如何设计程序,使得程序具有通用性。 107 | 108 | 提示: 109 | 110 | 1. ‘?'、‘!'和空格分别假定为字符串的结束符、一句话的最后的标点和单词间的间隔符,都不属于干扰符号。 111 | 2. 这里的通用性是指:任意带有其他符号干扰的一组字符串都能够通过程序被处理为具有如下特点的英文段落:段落中只包含字母、空格、‘!’三种符号。段落中的每句话都是以开头字母为大写,‘!’为结束标点的句子。 112 | 113 | ## 程序设计项目6 114 | 115 | 在屏幕中间显示:“中华”两个字。 116 | 117 | ![demo6](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo6.png)   118 | 119 | 提示:通过字模提取工具,可以提取字的显示信息。 120 | 121 | ## 程序设计项目7 122 | 123 | 在屏幕上动态演示六边形多次变大的过程。 124 | 125 | 要求:每次变大的过程,用不同颜色区分。 126 | 127 | ![demo7](https://github.com/Yibo-Li/assembly-language-exercises/blob/master/demo/demo7.gif?raw=true) 128 | 129 | ## 程序设计项目8 130 | 131 | 在屏幕中间显示一个‘Welcome to the world assembly !’字符串,同时显示模拟烟花效果。 132 | 133 | 其中,字符串的颜色为随机颜色,烟花的颜色也为随机颜色。 134 | 135 | ![demo8](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo8.gif) 136 | 137 | 进阶: 138 | 139 | 1. 实现同时多个烟花同时升起,且位置、高度、颜色随机。 140 | 2. 实现多个烟花升起时间、位置、高度、颜色、速度均随机。 141 | 142 | 提示:利用41h号端口的读写,实现随机数。 143 | 144 | ## 程序设计项目9 145 | 146 | 在屏幕上实现矩形的缩放。 147 | 148 | 要求: 149 |    150 | 1. 矩形缩放过程中,当矩形上下边重合时,矩形的宽度加10个字符;当矩形宽度为80个字符重合时,矩形宽度变为10个字符。 151 | 2. 开始矩形上下边用字符‘a’显示,当矩形上下边重合时,上下边变为‘b’显示,下一次上下边重合变为‘c’显示,依次类推。当用‘z’显示上下边重合时,上下边重新变为用‘a’显示。 152 | 3. 缩放过程中,矩形缩放到上下顶点时,上下边改变颜色。 153 | 154 | ![demo9](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo9.gif) 155 | 156 | ## 程序设计项目10 157 | 158 | 在屏幕上动态画出一棵七彩圣诞树。 159 | 160 | ![demo10](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo10.gif) 161 | 162 | ## 程序设计项目11 163 | 164 | 设计实现字符雨程序。 165 | 166 | ![demo11](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo11.gif) 167 | 168 | 提示: 169 | 170 | 1. 每列是一个单独的单元,在数据段中定义的数据要保证各列要显示的字符和开始显示的时机不一样。 171 | 2. 每一滴雨完全移出屏幕后,该雨滴所在列生成一个新的雨滴。 172 | 173 | ## 程序设计项目12 174 | 175 | 设计实现简单游戏“谁来买单”。 176 | 177 | 好友们一起出去玩,玩游戏决定谁来买单。人数为n(编号1、2、3...n)站成一个圆圈。首先从编号为m+1的人开始报数,数到k的人出列。接着,从下一个人开始报数,数到k的人出列。这个过程沿着圆圈一直进行,直到最终只剩下一个人,由这个人来买单。 178 | 179 | ![demo12](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo12.gif) 180 | 181 | 提示:涉及到循环单链表。 182 | 183 | ## 程序设计项目13 184 | 185 | 在屏幕上动态演示:冒泡法排序。 186 | 187 | ![demo13](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo13.gif) 188 | 189 | 示例说明: 190 | 191 | 1. 无箭头指向的红色数据为已经排序好的数据,红色箭头指向的红色数据为正在进行排序的数据,蓝色数据为未排序的数据。 192 | 2. 数据表格右边的‘>’和‘<’为两个数据的比较结果,若结果为‘>’,则将数据进行对换,取上方表格单元中的数据继续排序;若结果为‘<’(相等默认为‘<’),则直接取上方表格单元中的数据继续进行排序。 193 | 194 | 提示:需进行排序的数据大小随机产生,可利用41h端口实现。 195 | 196 | ## 程序设计项目14 197 | 198 | 在屏幕上动态演示:左手逃生法则。 199 | 200 | ![demo14](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo14.gif) 201 | 202 | 提示: 203 | 204 | 1. 地图中只有三种元素:墙、通道、出口。设计地图时,要给不同的元素赋予不同的编码。 205 | 2. 什么情况下改变行进的方向。遇到这些情况后根据当前方向决定下一步方向变化的规律是什么。 206 | 3. 左手逃生法则简述:在一个有出入口,没有回路的迷宫中,一直保持左手贴着墙壁向前走,总能找到迷宫出口。 207 | 208 | ## 程序设计项目15 209 | 210 | 在屏幕上动态演示:汉诺塔算法。 211 | 212 | ![demo15](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo15.gif) 213 | 214 | 注意: 215 | 216 | 1. 注意体验以栈的方式处理数据。 217 | 2. 用递归方式实现的子程序,注意参数的传递。 218 | 219 | ## 程序设计项目16 220 | 221 | 在屏幕上动态演示:朴素的字符串匹配算法。 222 | 223 | ![demo16](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo16.gif) 224 | 225 | 要求:能基本展现字符串匹配过程。 226 | 227 | 扩展: 228 | 229 | 1. 接收键盘输入构建关键字符串(模式串)。 230 | 2. 利用读取相关端口数据,产生随机字符,构建待匹配字符串(文本串)。 231 | 232 | 涉及知识点提示: 233 | 234 | 1. 标志寄存器中cmp指令和有条件转移。 235 | 2. int 指令中BIOS中断例程应用,应用int 10h中断例程设置光标位置。 236 | 3. 端口中对端口的读写。 237 | 4. 直接定址表中数据标号在其他段中的使用以及程序入口地址的直接定址。 238 | 5. 使用BIOS进行键盘输入和磁盘读写中使用int 16h中断例程读取键盘缓冲区以及字符串的输入。 239 | 240 | 朴素的字符串匹配算法说明:关键字符串(模式串)中各个字符分别与待匹配字符串(文本串)中的各个字符按顺序进行比较。 241 | 242 | ## 程序设计项目17 243 | 244 | 在屏幕上动态演示:农夫、狼、羊、草过河问题。 245 | 246 | ![demo17](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo17.gif) 247 | 248 | 说明:农夫、狼、羊、草过河,但是狼和羊不能同时在岸边,羊和草不能同时在岸边,除非有农夫在场。农夫要通过一只小船将它们都运送到对岸,且小船一次只能运送一种物品(农夫除外),将全部的物品成功的运送到河对岸。 249 | 250 | ## 程序设计项目18 251 | 252 | 设计实现游戏“五子棋”。 253 | 254 | ![demo18](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo18.gif) 255 | 256 | 基础要求:显示棋盘,棋盘上显示光标,光标可以用键盘进行上下左右控制,按空格键可以下棋子,两种颜色的棋子交替下,当五子连珠时提示获胜的颜色。 257 | 258 | 涉及知识点提示: 259 | 260 | 1. 标志寄存器中cmp指令和有条件转移。 261 | 2. 本程序需要用到键盘输入。 262 | 263 | 进阶要求: 264 | 265 | 1. 用户误操作处理,在原有的棋子上下子,在棋盘外下子等。 266 | 2. 提示信息,当前光标的位置,当前该谁下子等。 267 | 3. 增加控制,例如游戏结束可以选择重新开始还是退出游戏,按Esc键可以退出等。 268 | 4. 增加悔棋功能。 269 | 270 | ## 程序设计项目19 271 | 272 | 设计实现游戏“2048”。 273 | 274 | ![demo19](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo19.gif) 275 | 276 | 游戏规则: 277 | 278 | 玩家需要在16格方块的范围中凑出“2048”这个数字。 279 | 280 | 选择上下左右其中一个方向滑动,每滑动一次,所有的数字方块都往滑动的方向靠拢,系统在空白的方块随机出现一个数字(2或4),相同数字的方块在靠拢时会相加。 281 | 282 | 设计建议: 283 | 284 | 1. 向上、向下、向左、向右四个方向键控制方块移动。 285 | 2. 字母q键退出游戏。 286 | 287 | 涉及知识点提示: 288 | 289 | 1. 标志寄存器中cmp指令和有条件转移。 290 | 2. 本程序需要用到键盘输入。 291 | 292 | ## 程序设计项目20 293 | 294 | 设计实现游戏“像素鸟”。 295 | 296 | ![demo20](https://raw.githubusercontent.com/Yibo-Li/assembly-language-exercises/master/demo/demo20.gif) 297 | 298 | 基础要求: 299 | 300 | 1. 用一个笑脸来代替下落的鸟,用一个按键控制小鸟上升。(建议:小鸟每次落下两行或三行,按键使小鸟上升一行。) 301 | 2. 小鸟碰到上下边界游戏结束。 302 | 3. 小鸟撞到柱子游戏结束。 303 | 304 | 涉及知识点提示: 305 | 306 | 1. 标志寄存器中cmp指令和有条件转移。 307 | 2. 本程序涉及到中断程序的一个子程序: 308 | 309 | ```assembly 310 | push ax 311 |    312 | mov ah,1 313 | int 16h ;16h号中断的1号功能,读出键盘缓冲区的数据,al接收ASCII码,并且根据读出键盘缓冲区的情况修改相应的标志位。 314 | je CNend ;若键盘缓冲区没有数据则跳到子程序结束位置。 315 | 316 | cmp al,' ';与空格比较。 317 | jne CNend ;不相等则跳到子程序结束位置。 318 | 319 | ;/////这里添加你的功能代码,上面比较的是空格,按一次空格执行的代码。 320 | 321 | mov ah,7;21h号中断的7号功能,读出键盘缓冲区不回显。 322 | int 21h 323 | 324 | CNend: 325 | pop ax 326 | ret 327 | ``` 328 | 329 | 进阶要求: 330 | 331 | 1. 给小鸟增加重力加速度效果,没有按键,小鸟会自由落体。(建议:可以用一些数据模拟,然后缩小100倍作为实际移动的距离。例如,小鸟活动范围为上下21行,可以模拟为2100米,显示的时候缩小一百倍确定小鸟实际显示位置) 332 | 2. 按键会减小小鸟的下落速度,并一定程度的让小鸟向上位移一段距离。 333 | 3. 增加控制,例如游戏失败可以选择重新开始还是退出游戏,可以重新开始的次数(生命数),通过多少柱子可以过一关,过关提升难度(提升水平速度,减小柱子空挡等)。 334 | 4. 显示一些参数,比如通过的柱子数,当前生命剩余数,小鸟当前下落速度等。 335 | -------------------------------------------------------------------------------- /demo/demo10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo10.gif -------------------------------------------------------------------------------- /demo/demo11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo11.gif -------------------------------------------------------------------------------- /demo/demo12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo12.gif -------------------------------------------------------------------------------- /demo/demo13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo13.gif -------------------------------------------------------------------------------- /demo/demo14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo14.gif -------------------------------------------------------------------------------- /demo/demo15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo15.gif -------------------------------------------------------------------------------- /demo/demo16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo16.gif -------------------------------------------------------------------------------- /demo/demo17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo17.gif -------------------------------------------------------------------------------- /demo/demo18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo18.gif -------------------------------------------------------------------------------- /demo/demo19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo19.gif -------------------------------------------------------------------------------- /demo/demo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo2.png -------------------------------------------------------------------------------- /demo/demo20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo20.gif -------------------------------------------------------------------------------- /demo/demo6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo6.png -------------------------------------------------------------------------------- /demo/demo7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo7.gif -------------------------------------------------------------------------------- /demo/demo8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo8.gif -------------------------------------------------------------------------------- /demo/demo9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yibo-Li/assembly-exercises/6ffa0f0aee058fcd9ae1761be85c66e40b2c8905/demo/demo9.gif --------------------------------------------------------------------------------