好文档 - 专业文书写作范文服务资料分享网站

编写程序

天下 分享 时间: 加入收藏 我要投稿 点赞

AF:

BINARY:

DISPN: 码显示 DISP:

CMP AL, 39H ;是‘0~9’吗? JA AF ;不是,转‘A~F’的处理 AND AL, 0FH ;转换为:0000B~1001B JMP BINARY

AND AL, 1101 1111B ;转换为大写字母

CMP AL, 41H ;又F吗? JA INPUT ;不是‘A~F’的数重新输入 AND AL, 0FH ;转换为:1010B~1111B ADD AL, 9 OR BL, AL ;将键盘输入的数进行组合

DEL CH JNZ INPUT MOV CX, 16 ;将16位二进制数一位位地转换成ASCIIMOV DL, 0

ROL BX, 1 RCL DL, 1 OR DL, 30H MOV AH, 2 INT 21H LOOP DISP RET

;进行显示

STOP:

5.10 设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN

在该文中的出现次数,并以格式“SUN:xxxx”显示出次数。 答:程序如下:

DSEG SEGMENT ENG DB ‘Here is sun, sun ,…,$’ DISP DB ‘SUN:’ DAT DB ‘0000’ , 0DH, 0AH, ‘$’ KEYWORD DB ‘sun’ DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG, ES: DSEG START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX MOV AX, DSEG MOV DS, AX ;给DS赋值 MOV ES, AX ;给ES赋值

BEGIN:

MOV AX, 0 ;记录sun的个数

4

MOV DX, DISP-ENG-2 ;计算ENG的长度(每次比较sun,因此比较次数-2)

LEA BX, ENG

COMP: MOV DI, BX

LEA SI, KEYWORD MOV CX, 3 REPE CMPSB ;串比较 JNZ NOMATCH INC AX ;是,SUN的个数加1 ADD BX, 2 ;BX为16位,所以加2

NOMATCH: INC BX ;指向ENG的下一个字母

DEC DX ;ENG的长度减1 JNZ COMP

DONE: MOV CH, 4 ;将次数转换为16进制数的ASCII码

MOV CL, 4 LEA BX, DAT ;转换结果存入DAT单元中

DONE1: ROL AX, CL

MOV DX, AX AND DL, 0FH ;取一位16进制数 ADD DL, 30H CMP DL, 39H JLE STORE ;小于等于9,跳转 ADD DL, 07H ;是“A~F”所以要加7

STORE: MOV [BX], DL ;转换结果存入DAT单元中

INC BX DEC CH JNZ DONE1

DISPLAY: LEA DX, DISP ;显示字符串程序(将DISP和DAT一起显示)

MOV AH, 09H INT 21H RET

MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------

END START

5.11 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计

数结果。

答:程序段如下:

DSEG SEGMENT BUFF DB 50 DUP (‘ ’) COUNT DW 0 DSEG ENDS

4

BEGIN: INPUT:

NEXT:

DISP:

LEA BX, BUFF MOV COUNT, 0

MOV AH, 01;从键盘输入一个字符的功能调用

INT 21H

MOV [BX], AL INC BX

CMP AL, ‘$’ ;是$结束符吗? JNZ INPUT ;不是,继续输入 LEA BX, BUFF ;对非数字字符进行计数 MOV CL, [BX]

INC BX

CMP CL, ‘$’ ;是$结束符,则转去显示 JZ DISP CMP CL, 30H ;小于0是非数字字符 JB NEXT CMP CL, 39H ;大于9是非数字字符 JA NEXT INC COUNT ;个数+1 JMP NEXT ┇ ;16进制数显示程序段(省略)

5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后

续项向前压缩,最后将数组的剩余部分补上0。 答:程序如下:

DSEG SEGMENT MEM DW 100 DUP (?) DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, DSEG MOV DS, AX ;给DS赋值

BEGIN: MOV SI, (100-1)*2 ;(SI)指向MEM的末元素的首地址

MOV BX, -2 ;地址指针的初值 MOV CX, 100

COMP: ADD BX, 2

CMP MEM [BX], 0 JZ CONS LOOP COMP JMP FINISH ;比较完了,已无0则结束

4

CONS: MOV DI, BX ;删除? CONS1: CMP DI, SI ;到了最后单元码?

JAE NOMOV

MOV AX, MEM [DI+2] ;后面的元素向前移位 MOV MEM [DI], AX ADD DI, 2 JMP CONS1

NOMOV:MOV WORD PTR [SI], 0 ;最后单元补0

LOOP COMP

FINISH: RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------

END START

5.13 在STRING到STRING+99单元中存放着一个字符串,试编制一个程序测试该字符串中

是否存在数字,如有则把CL的第5位置1,否则将该位置0。 答:程序如下:

DSEG SEGMENT STRING DB 100 DUP (?) DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, DSEG MOV DS, AX ;给DS赋值

BEGIN: MOV SI, 0 ;(SI)作为地址指针的变化值

MOV CX, 100

REPEAT:MOV AL, STRING [SI]

CMP AL, 30H JB GO_ON CMP AL, 39H JA GO_ON OR CL, 20H ;存在数字把CL的第5位置1 20H(32=25) 使得第5位置1 JMP EXIT

GO_ON: INC SI

LOOP REPEAT

AND CL, 0DFH ;不存在数字把CL的第5位置0

EXIT: RET

4

MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------

END START

5.14 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序

把出现次数最多的数及其出现次数分别存放于AX和CX中。 答:程序如下:

DSEG SEGMENT TABLE DW 100H DUP (?) ;数组中的数据是按增序排列的 DATA DW ? COUNT DW 0 DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, DSEG MOV DS, AX ;给DS赋值

BEGIN: MOV CX, 100H ;循环计数器

MOV SI, 0

NEXT: MOV DX, 0

MOV AX, TABLE [SI]

COMP: CMP TABLE [SI], AX ;计算一个数的出现次数

[将数组中的数放入AX,AX中的数和数组其他数依次比较,若一样则DX++] JNE ADDR INC DX ADD SI, 2 LOOP COMP

ADDR: CMP DX, COUNT ;此数出现的次数最多吗?

JLE DONE

MOV COUNT, DX ;目前此数出现的次数最多,记下次数

MOV DATA, AX ;记下此数

DONE: LOOP NEXT ;准备取下一个数

MOV CX, COUNT ;出现最多的次数存入(CX) MOV AX, DATA ;出现最多的数存入(AX) RET

MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------

4

编写程序

AF:BINARY:DISPN:码显示DISP:CMPAL,39H;是‘0~9’吗?JAAF;不是,转‘A~F’的处理ANDAL,0FH;转换为:0000B~1001BJMPBINARYANDAL,11011111B;转换为
推荐度:
点击下载文档文档为doc格式
74g014ubxk77t6k14pg60zn011oo6h01am6
领取福利

微信扫码领取福利

微信扫码分享