计算机接口技术与微分原理

例4.8求10个无符号字节数的和


DATA SEGMENT

    ;此处输入数据段代码

TABLE DB 12H,23H,34H,45H,56H

      DB67H,78H,89H,9AH,0FDH

     SUM DW ?                     

DATA ENDS

;

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA,ES:DATA

START:

;此处输入代码段代码

    MOV AX,DATA

    MOV DS,AX

    MOV ES,AX

    LEASI,TABLE

    MOV CX,10

    XOR AX,AX

NEXT:ADD AL,[SI]

     ADC AH,0

     INC SI

     LOOP NEXT

     MOV SUM,AX

     HLT

CODE ENDS

    END START


计算机接口技术与微分原理

例4.9判断是否有F8按下,若有则转NEXT


DATAS SEGMENT

    ;此处输入数据段代码 

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUMECS:CODES,DS:DATAS,SS:STACKS

START:

    MOVAX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV AH,0

    CMP AL,0

    JNZ ERROR

    CMP AH,42H

    JE NEXT

NEXT:

ERROR:

CODES ENDS

    END START

计算机接口技术与微分原理

例4.10将光标置于0显示页(20,30)位置,并以正常属性打印‘$’


DATAS SEGMENT

    ;此处输入数据段代码 

DATAS END

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUMECS:CODES,DS:DATAS,SS:STACKS

START:

    MOVAX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV AH,2

    MOV BH,0

    MOV DH,20

    MOV DL,30

    INT 10H

    MOV AH,9

    MOV BH,0

    MOV BL,7

    MOV AL,'$'

    MOV CX,1

    INT 10H

CODES ENDS

    END START


 计算机接口技术与微分原理

例4.11从键盘输入Y或N字符


DATAS SEGMENT

    ;此处输入数据段代码 

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUMECS:CODES,DS:DATAS,SS:STACKS

START:

    MOVAX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    KEY:MOVAH,1

    INT 21H

    CMP AL,'Y'

    JE YES

    CMP AL,'N'

    JE DAT

    JMP KEY

YES:

DAT:

CODES ENDS

    END START

计算机接口技术与微分原理计算机接口技术与微分原理

例4.12从键盘上输入字符串‘hello’,并在串尾加标识符$


DATA SEGMENT

    ;此处输入数据段代码 

    STRING DB10,0,10 DUP(?)

DATA ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    LEADX,STRING

    MOV AH,0AH

    INT 21H

    MOVCL,STRING+1

    XOR CH,CH

    ADD DX,CX

    MOV BX,DX

    MOV BYTEPTR[BX+2],'$'

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START


 

结果:计算机接口技术与微分原理

例4.13在屏幕上一次显示1,2,3,A ,B ,C


DATA SEGMENT

    ;此处输入数据段代码

    STR1 DB '123ABC'

DATA ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    LEA BX,STR1

    MOV CX,6

LPP:MOV AH,2

    MOV DL,[BX]

    INC BX

    INT 21H

    LOOP LPP

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理

例4.14在屏幕上显示‘HELLO WORLD!’


DSEG SEGMENT

    ;此处输入数据段代码

    STRING DB'HELLO WORLD!',0DH,0AH,'$' 

DSEG ENDS

CSEG SEGMENT

    ASSUMECS:CSEG,DS:DSEG

START:

    MOV AX,DSEG

    MOV DS,AX

    ;此处输入代码段代码

    LEADX,STRING

    MOV AH,09H

    INT 21H

    MOV AH,4CH

    INT 21H

CSEG ENDS

    END START

计算机接口技术与微分原理

例4.15从键盘上输入一个字符串,在字符串尾插入$,并显示该字符串


DATA SEGMENT

    ;此处输入数据段代码

    BUFSIZE DB50

    ACTLEN DB ?

    CHARS DB 50DUP(20H)

DATA ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOV DX,OFFSET BUFSIZE

    MOV AH,0AH

    INT 21H

    XOR CX,CX

    MOVCL,ACTLEN

    MOV DX,OFFSET CHARS

    MOV BX,DX

    ADD BX,CX

    MOV BYTEPTR[BX],'$'

    MOV AH,09H

    INT 21H

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理

 

例4.16编写S=86H*34*-21H的程式,式中的三个数均为无符号数


DATA SEGMENT

    ;此处输入数据段代码

    NUM DB86H,34H,21H

    RESULT DW ? 

DATA ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    LEA SI,NUM

    LEADI,RESULT

    MOV AL,[SI]

    MOVBL,[SI+1]

    MUL BL

    MOVBL,[SI+2]

    MOV BH,0

    SUB AX,BX

    MOV [DI],AX

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理

例4.17内存自TABLE开始的连续16个单元中存放着0-15的平方值,查表求DATA中任意数X(0-15)的平方值,并将结果放到RESULT。


DSEG SEGMENT

    ;此处输入数据段代码

    TABLE DB0,1,4,9,16,25,36,49,64,81,100,121,144,169,225

    DATA DB ?

    RESULT DB ?

DSEG ENDS

;

SSEG SEGMENT STACK'STACK'

DB 100 DUP(?)

SSEG ENDS

;

CSEG SEGMENT

    ASSUMECS:CSEG,DS:DSEG,SS:SSEG

START:

    MOV AX,DSEG

    MOV DS,AX

    ;此处输入代码段代码

    MOV AX,DSEG

    MOV SS,AX

    LEABX,TABLE

    MOV AH,0

    MOV AL,DATA

    ADD BX,AX

    MOV AL,[BX]

    MOVRESULT,AL

    MOV AH,4CH

    INT 21H

CSEG ENDS

    END START

计算机接口技术与微分原理

例4.18编写程序,将数据区中以BUFFER为首地址的100个字节单元清零。


DATA SEGMENT

    ;此处输入数据段代码

    BUFFER DB100 DUP(?)

    COUNT DW100 

DATA ENDS

STACK SEGMENT

    ;此处输入堆栈段代码

    DW 32 DUP(?)

STACK ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA,SS:STACK

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOVAX,STACK

    MOV SS,AX

    MOVCS,COUNT

    LEABX,BUFFER

    ADD CX,BX

AGAIN:MOV BYTE PTR[BX],0

    INC BX

    CMP BX,CX

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理计算机接口技术与微分原理

例4.19在当前数据段中DATA1开始的顺序80个单元中,存放着80位同学某功课的考试成绩。编写程序统计》=90分,70-79分,60-69分,60-69分以及<60分的人数,并将结果放到同一数据段中DATA2开始的五个单元中.


DATA SEGMENT

    ;此处输入数据段代码

     DATA1 DB80 DUP(?)

     DATA2 DB 5DUP(0)

DATA ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOV CX,80

    LEASI,DATA1

    LEADI,DATA2

AGAIN:MOV AL,[SI]

       CMP AL,90

       JC NEXT1

       INC BYTEPTR[DI]

       JMP STO

NEXT1:

       CMP AL,80

       JC NEXT2

       INC BYTEPTR[DI+1]

       JMP STO

NEXT2:

       CMP AL,70

       JC NEXT3

       INC BYTEPTR[DI+2]

       JMP STO

NEXT3:

       CMP AL,60

       JC NEXT4

       INC BYTEPTR[DI+3]

       JMP STO

NEXT4:INC BYTE PTR[DI+4]

STO:INC SI

       LOOP AGAIN

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理 

例4.20把从MEM单元开始的100个16位无符号数从大到小的顺序排列。


DSEG SEGMENT

    ;此处输入数据段代码

    MEM DW 100 DUP(?

DSEG ENDS

;

CSEG SEGMENT

    ASSUMECS:CSEG,DS:DSEG

START:

    MOV AX,DSEG

    MOV DS,AX

    ;此处输入代码段代码

    LEA DI,MEM

    MOV BL,99

NEXT1:

       MOV SI,DI

       MOV CL,BL

NEXT2:

       MOVAX,[SI]

       ADD SI,2

       CMPAX,[SI]

       JNC NEXT3

       MOV[SI-2],DX

       MOV[SI],AX

NEXT3:

       DEC CL

       JNZ NEXT1

       DEC BL

       JNZ NEXT2

    MOV AH,4CH

    INT 21H

CSEG ENDS

    END START

计算机接口技术与微分原理计算机接口技术与微分原理

例4.21从一个字符串中删去一个字符


DATA SEGMENT

    ;此处输入数据段代码

    STRING DB 'EXPERIENCE...'

    LENG DW $-STRING

    KEY DB'X' 

DATA ENDS

;

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA,ES:DATA

START:

       MAIN PROC FAR

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOV ES,AX

    LEABX,STRING

    LEA CX,LENG

    PUSH BX

    PUSH CX

    MOV AL,KEY

    CALL DELCHAR

    MOV AH,4CH

    INT 21H

MAIN ENDP

DELCHAR PROC

       PUSH BP

       MOV BP,SP

       PUSH SI

       PUSH DI

       CLD

       MOVSI,[BP+4]

       MOVCX,[SI]

       MOVDI,[BP+6]

       REPNE SCASB

       JNE DONE

       MOVSI,[BP+4]

       DEC WORDPTR[SI]

       MOV SI,DI

       DEC DI

       REP MOVSB

DONE:POP DI

       POP SI

       POP BP

       RET

DELCHAR ENDP

       CODE ENDS

              END STRAT 

例4.22设一个字符串长度不超过255个字符,是确定该字符串的长度并显示长度值。


DATA SEGMENT

    ;此处输入数据段代码

    STRING DB'THIS IS A STRING...',0DH

    LENG DW ?

    CRR DB 13

    MESSAGE DB 'THE STRING IS TOO LONG',0DH,0AH,'$'

DATA ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA,ES:DATA

START:

    MAIN PROC FAR

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    CALL STRLEN

    MOV DX,LENG

    CMP DX,100H

    JB NEXT1

    LEADX,MESSAGE

    MOV AH,9

    INT 21H

    JMP NEXT2

NEXT1:

       MOV DH,DL

       MOV CL,4

       SHR DL,CL

       CMP DL,9

       JBE LP

       ADD DL,7

LP:

       ADDDL,30H

       MOV AH,2

       INT 21H

       MOV DL,DH

       MOVDL,0FH

       CMP DL,9

       JBE LP1

       ADD DL,7

LP1:

       ADDDL,30H

       MOV AH,2

       INT 21H

       MOV DL,'H'

       MOV AH,2

       INT 21H

NEXT2:

       MOVAH,4CH

       INT 21H

MAIN ENDP

STRLEN PROC

       LEADI,STRING

       MOVCX,0FFFFH

       MOVAL,CRR

       MOV AH,'$'

       CLD

AGAIN:

       INC CX

       CMPCX,100H

       JAE DONE

       SCASB

       JNE AGAIN

DONE:

       MOVLENG,CX

       RET

STRLEN ENDP

CODE ENDS

    END START

计算机接口技术与微分原理

例4.23把用ASCII表示的数转换为二进制,ASCII存放在仪MASC为首地址的内存单元中,转换结果放在MBIN.


DATA SEGMENT

    ;此处输入数据段代码

MASC DB '2','6','A','1'

MBIN DB 2 DUP(?

DATA ENDS

;

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOV CL,4

    MOV CH,CL

    LEA SI,MASC

    CLD

    XOR AX,AX

    XOR DX,DX

NEXT1:LODSB

       ANDAL,7FH

       CMP AL,'0'

       JB ERROR

       CMP AL,'9'

       JA NEXT2

       SUBAL,30H

       JMP SHORT NEXT3

NEXT2:

       CMP AL,'A'

       JB ERROR

       CMP AL,'F'

       JA ERROR

       SUBAL,37H

NEXT3:

       OR DL,AL

       ROR DX,CL

ERROR:

       DEC CH

       JNZ NEXT1

       MOV WORDPTR MBIN,DX

       MOVAH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理计算机接口技术与微分原理

例4.24把存放在BUFF中的16位二进制数转换为ASCII码表示的等值数字符串。


DATA SEGMENT

    ;此处输入数据段代码

BUFF DW 4FB6H

ASCC DB 5 DUP(?

DATA ENDS

;

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOV CX,5

    LEA DI,ASCC

    XOR DX,DX

    MOV AX,BUFF

    MOV BX,0AH

AGAIN:

       DIV BX

       ADDDL,30H

       MOV[DI],DL

       INC DI

       AND AX,AX

       JZ STO

       MOV DL,0

       LOOP AGAIN

STO:

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理

例4.25两个多字节二进制数求和程序


DATA SEGMENT

    ;此处输入数据段代码

BUFF1 DB 4FH,0B6H,7CH,34H,56H,1FH

BUFF2 DB 13H,24H,57H,68H,0FDH,9AH

SUM DB 6 DUP(?)

CONT DB

DATA ENDS

;

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOV SI,OFFSET BUFF1

    MOV DI,OFFSET BUFF2

    MOV BX,OFFSET SUM

    XOR CX,CX

    MOV CL,CONT

GOON:

       MOVAX,[SI]

       ADCAX,[DI]

       PUSHF

       ADD SI,2

       ADD DI,2

       MOV[BX],AX

       POPF

       LOOP GOON

       ADC BYTEPTR[BX],0

    MOV AH,4CH

    INT 21H

CODE ENDS

    END START

计算机接口技术与微分原理计算机接口技术与微分原理

例4.26从键盘上输入一个字符串,并在内存中已有的一张表中查找该字符串,如找到则在屏幕上显示OK,若找不到则显示NO,如输入长度大于表的长度则显示Wrong!


DATA SEGMENT

    ;此处输入数据段代码

    TABLE DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

    STRING1 DB 'PLEASE ENTERING A STRING:',0DH,0AH,'$'

    STRING2 DB 'WRONG!',0DH,0AH,'$'

    STRING3 DB 'OK!','$'

    STRING4 DB 'NO!','$'

    BUFFER DB40,?,40 DUP(?)

    TAB_LEN EQU26

DATA ENDS

STACK SEGMENT

    ;此处输入堆栈段代码

STACK ENDS

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOV ES,AX

    LEADX,STRING1

    MOV AH,09H

    INT 21H

    LEADX,BUFFER

    MOV AH,0AH

    INT 21H

    MOV SI,DX

    INC SI

    MOV BL,[SI]

    MOV BH,0

    INC SI

    LEADI,TABLE

    MOVCX,TAB_LEN

    CMP CX,BX

    JNC GOON

    LEADX,STRING2

    JMP EXIT

GOON:CLD

       MOVAL,[SI]

SCAN:REPNZ SCASB

       JZ MATCH

ERROR:LEA DX,STRING4

       JMP EXIT

MATCH:INC CX

       CMP CX,BX

       JC ERROR

       PUSH CX

       PUSH SI

       PUSH DI

       MOV CX,BX

 

       DEC DI

       REPZ CMPSB

       POP DI

       POP SI

       POP CX

       JZ FOUND

       JCXZ ERROR

FOUND:DEC DI

       LEADX,STRING3

EXIT:MOV AH,09H

       INT 21H

    MOV AH,4CH

    INT 21H

CODE ENDS

END START

 计算机接口技术与微分原理

计算机接口技术与微分原理

计算机接口技术与微分原理

例4.27在分辨率640*480,16色的屏幕上绘制一个周期的正弦波


SETSCREEN MACRO

       MOV AH,0

       MOVAL,12H

       INT 10H

ENDM

WRITEDOT MACRO

       MOVAH,0CH

       MOVAL,02H

       MOVCX,ANGLE

       ADDCX,140

       MOVDX,TEMP

       INT 10H

ENDM

DATA SEGMENT

    ;此处输入数据段代码

SINE DB 00,03,07,10,14,17,21,24,28,31,

              35,38,42,45,48,52,55,58,62,65,

              68,72,75,78,81,85,88,91,94,97,

              100,103,106,109,112,115,118,120,

              123,126,129,131,134,136,139,141

             

ANGLE DW 0

TEMP DW

DATA ENDS

 

STACK SEGMENT

    ;此处输入堆栈段代码

    DB 64 DUP(?)

STACK ENDS

;

CODE SEGMENT

    ASSUMECS:CODE,DS:DATA,SS:STACK

START:

       MAIN PROC FAR

       PUSH DS

       PUSH AX

       PUSH BX

    MOV AX,DATA

    MOV DS,AX

    ;此处输入代码段代码

    MOVAX,STACK

    MOV SS,AX

    SETSCREEN

AGAIN:

       LEABX,SINE

       MOVAX,ANGLE

       CMPAX,180

       JLE QUAD1

       SUBAX,180

QUAD1:

       CMP AX,90

       JLE QUAD2

       NEG AX

       ADDAX,180

QUAD2:

       ADD BX,AX

       MOVAL,SINE[BX]

       PUSH AX

       MOV AH,0

       CMPANGLE,180

       JGE BIGDIS

       NEG AL

       ADDAL,240

       JMP READY

BIGDIS:ADD AX,240

READY:

       MOVTEMP,AX

       POP AX

       WRITEDOT

       ADDANGLE,1

       CMPANGLE,360

       JLE AGAIN

       MOV AH,07

       INT 21H

       MOV AH,0

       MOV AL,3

       INT 10H

       POP BX

       POP AX

       POP DS

       RET

MAIN ENDP

CODE ENDS

    END START

计算机接口技术与微分原理