最後に、コードを改善します:
TINY .MODEL .STACK 100 。データ DB 11111110B ledshow;変数「変数名データ型データ」によって定義されたデータ・セグメント、バイトDBとして 7 DBの07H ゼロのDB 00H 。コード START:A EQU 0270H;デジタルポートアドレス B EQU 0271H; 0-1スイッチポートアドレス C EQU 0272H;制御デジタル表示内容 現在のプログラムのデータセグメントアドレスを取得し、保存されたデータ・セグメント・レジスタDSに送信、MOVデータ@斧、。 mov dsは、斧;ので、メモリオペランドアクセス手順は、データ・セグメントへのアクセスがデフォルトで指定されたときに、そのDS MOV DX、273h MOVアル、10000010H アウトDX、アル 関数: 通話遅延 MOV DX、B らに、DX;らのポートアドレスからのデータ読み出しでDX そして、アル、00001111B CMPアル、00000001B それはFUN1です CMPアル、00000010B それがfun2です CMPアル、00000100B fun3 CMPアル、00001000B あなたfun4 FUN1:MOV DX、A MOVアル、00H DXから、アル、アル値はDXのポートアドレスに読み出されます JMP機能 fun2:MOV DX、A MOVアル、0FFH アウトDX、アル MOV DX、C MOVアル、01011011B アウトDX、アル JMP機能 fun3:MOV DX、C MOVアル、01001111B アウトDX、アル MOV DX、A fun3xh:MOV CXを、8 LEAのBX、ledshow ROL ledshow MOVら、7 12月7 XLAT アウトDX、アル 通話遅延 ループfun3xh JMP機能 fun4:MOV DX、C MOVアル、01100110B アウトDX、アル MOV DX、A fun4xh:MOV CXを、8 LEAのBX、ledshow RORのledshow MOVら、ゼロ ゼロ株式会社 XLAT アウトDX、アル 通話遅延 ループfun4xh JMP機能 サブルーチンを開始PROC;遅延周辺PROC近く使用した場合、サブルーチン、同じコードセグメントにプログラムを呼び出しは、同じコードセグメントの他のプログラムによって呼び出されることができ、はるかに同じコードセグメントで同じまたは異なるコードであってもよいしないことにより呼ばれるプログラムのセクション。 プッシュCX MOV CX、30000 DELAY1:ループDELAY1 ポップCX RET;サブルーチンコールの終了、サブルーチンプログラムの次のステップに対応するアドレス転送からのパラメータの転送を達成するため 遅延ENDP END START
フォワードおよびアセンブリコード:
TINY .MODEL COM_ADD EQU 0273H PA_ADD EQU 0270H PB_ADD EQU 0271H PC_ADD EQU 0272H .STACK 100 。データ LED_Data DB 11111110B DB 11111101B DB 11111011B DB 11110111B DB 11101111B DB 11011111B DB 10111111B DB 01111111B 。コード START:MOV AX、データ@ MOV DS、AX NOP MOV DX、COM_ADD MOV AL、82H; PA、PB、基本モード出力のPC OUT DX、AL LOOP1:CALL DL500ms CALL DL500ms MOV DX、PB_ADD Al、DX AND AL、00001111B CMP AL、00000001B JE F1 CMPアル、00000010B あなたF2 CMPアル、00000100B それはF3です CMPアル、00001000B それはF4です F1: MOV DX、PA_ADD MOVアル、00H OUT DX、アル JMP LOOP1 F2:MOV DX、PA_ADD MOVアル、0FFH OUT DX、アル MOV DX、PC_ADD MOVアル、01011011B アウトDX、アル JMP LOOP1 F4: MOV DX、PC_ADD MOVアル、01100110B アウトDX、アル MOV DX、PA_ADD LEAのBX、LED_DATA MOVアル、0 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、1 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、2 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、3 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVら、4 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、5 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVら、6 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVら、7 XLAT アウトDX、アル コールDL500ms JMP LOOP1 F3: MOV DX、PC_ADD MOVアル、01001111B アウトDX、アル MOV DX、PA_ADD LEAのBX、LED_DATA MOVら、7 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVら、6 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、5 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVら、4 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、3 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、2 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、1 XLAT アウトDX、アル コールDL500ms LEAのBX、LED_DATA MOVアル、0 XLAT アウトDX、アル コールDL500ms JMP LOOP1 DL500ms PROC NEAR PUSH CX MOV CX、30000 DL500ms1:LOOP DL500ms1 POP CX RIGHT DL500ms ENDP END START
大手トピック:
8 DUP(0)の光を照射します MOVのSI、Leddyオフセット コールLEDdisp LEDdisp PROC プッシュ斧 プッシュBX プッシュDX MOV BX、オフセットLEDtb MOVああ、0FEH LED1:lodsb XLAT CS:LEDtb MOV DX、segport アウトDX、アル mov al, ah mov dx, bitport out dx, al call delay rol ah, 1 cmp ah, 0feh jnz LED1 pop dx pop bx pop ax ret LEDtb db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h db 80h, 90h, 88h, 83h, 0c6h, 0c1h, 86h, 8eh LEDdisp endp timer =10 delay proc push bx push cx mov bx, timer delay1: xor cx, cx delay2: loop delay2 dec bx jnz delay1 pop cx pop bx ret delay endp