IBMPC汇编语言程序设计课后习题答案).docx

上传人:小飞机 文档编号:3158455 上传时间:2023-03-11 格式:DOCX 页数:28 大小:45.19KB
返回 下载 相关 举报
IBMPC汇编语言程序设计课后习题答案).docx_第1页
第1页 / 共28页
IBMPC汇编语言程序设计课后习题答案).docx_第2页
第2页 / 共28页
IBMPC汇编语言程序设计课后习题答案).docx_第3页
第3页 / 共28页
IBMPC汇编语言程序设计课后习题答案).docx_第4页
第4页 / 共28页
IBMPC汇编语言程序设计课后习题答案).docx_第5页
第5页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《IBMPC汇编语言程序设计课后习题答案).docx》由会员分享,可在线阅读,更多相关《IBMPC汇编语言程序设计课后习题答案).docx(28页珍藏版)》请在三一办公上搜索。

1、IBMPC汇编语言程序设计课后习题答案) 第五章 5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答:程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H CMP AL, a ;输入字符z吗? JA STOP SUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可 MOV DL, AL ;显示一个字符的DOS调用 MOV AH, 2 INT 21H JMP BEGIN STOP: RET 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 答:

2、程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H CMP AL, a ;输入字符z吗? JA STOP DEC AL ;得到前导字符 MOV DL, AL ;准备显示三个字符 MOV CX, 3 DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用 INT 21H INC DL LOOP DISPLAY STOP: RET 5.3 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。 答:程序段如下: DSEG SEGMENT STORE DB 4 DUP (?) DSEG ENDS BEGIN

3、: MOV CL, 4 ;右移四次 MOV CH, 4 ;循环四次 LEA BX, STORE A10: MOV DX, AX AND DX, 0FH ;取AX的低四位 MOV BX, DL ;低四位存入STORE中 INC BX SHR AX, CL ;右移四次 DEC CH JNZ A10 ;循环四次完了码? B10: MOV DL, STORE ;四组数分别放在AL、BL、CL和DL中 MOV CL, STORE+1 MOV BL, STORE+2 MOV AL, STORE+3 STOP: RET 5.4 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相

4、同,若相同则显示MATCH, 若不相同则显示NO MATCH。 答:程序如下: DSEG SEGMENT STRING1 DB I am a student. STRING2 DB I am a student! YES DB MATCH, 0DH, 0AH, $ NO DB NO MATCH, 0DH, 0AH, $ 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,

5、 AX ;给DS赋值 MOV ES, AX ;给ES赋值 ; BEGIN: LEA SI, STRING1 ;设置串比较指令的初值 LEA DI, STRING2 CLD MOV CX, STRING2 - STRING1 REPE CMPSB ;串比较 JNE DISPNO LEA DX, YES ;显示MATCH JMP DISPLAY DISPNO: LEA DX, NO ;显示NO MATCH DISPLAY: MOV AH, 9 ;显示一个字符串的DOS调用 INT 21H RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;- END START 5.5 试编写一程

6、序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。 答:程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H SUB AL, 0 JB STOP ;输入字符9吗? JA STOP CBW MOV CX, AX ;响铃次数N JCXZ STOP BELL: MOV DL, 07H ;准备响铃 MOV AH, 2 ;显示一个字符的DOS调用,实际为响铃 INT 21H CALL DELAY100ms ;延时100ms LOOP BELL STOP: RET 5.6 编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组P

7、和负数数组N,并分别把这两个数组中数据的个数显示出来。 答:程序如下: DSEG SEGMENT COUNT EQU 20 ARRAY DW 20 DUP (?) ;存放数组 COUNT1 DB 0 ;存放正数的个数 ARRAY1 DW 20 DUP (?) ;存放正数 COUNT2 DB 0 ;存放负数的个数 ARRAY2 DW 20 DUP (?) ;存放负数 ZHEN DB 0DH, 0AH, The positive number is:, $ ;正数的个数是: FU DB 0DH, 0AH, The negative number is:, $ ;负数的个数是: CRLF DB 0D

8、H, 0AH, $ 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, COUNT LEA BX, ARRAY LEA SI, ARRAY1 LEA DI, ARRAY2 BEGIN1: MOV AX, BX CMP AX, 0 ;是负数码? JS FUSHU MOV SI, AX ;是正数,存入正数数组 INC COUNT1 ;正数个数+

9、1 ADD SI, 2 JMP SHORT NEXT FUSHU: MOV DI, AX ;是负数,存入负数数组 INC COUNT2 ;负数个数+1 ADD DI, 2 NEXT: ADD BX, 2 LOOP BEGIN1 LEA DX, ZHEN ;显示正数个数 MOV AL, COUNT1 CALL DISPLAY ;调显示子程序 LEA DX, FU ;显示负数个数 MOV AL, COUNT2 CALL DISPLAY ;调显示子程序 RET MAIN ENDP ;- DISPLAY PROC NEAR ;显示子程序 MOV AH, 9 ;显示一个字符串的DOS调用 INT 21H

10、 AAM ;将(AL)中的二进制数转换为二个非压缩BCD码 ADD AH, 0 ;变为09的ASCII码 MOV DL, AH MOV AH, 2 ;显示一个字符的DOS调用 INT 21H ADD AL, 0 ;变为09的ASCII码 MOV DL, AL MOV AH, 2 ;显示一个字符的DOS调用 INT 21H LEA DX, CRLF ;显示回车换行 MOV AH, 9 ;显示一个字符串的DOS调用 INT 21H RET DISPLAY ENDP ;显示子程序结束 CSEG ENDS ;以上定义代码段 ;- END START 5.7 试编写一个汇编语言程序,求出首地址为DATA

11、的100D字数组中的最小偶数,并把它存放在AX中。 答:程序段如下: BEGIN: MOV BX, 0 MOV CX, 100 COMPARE: MOV AX, DATABX ;取数组的第一个偶数 ADD BX, 2 TEST AX, 01H ;是偶数吗? LOOPNZ COMPARE ;不是,比较下一个数 JNZ STOP ;没有偶数,退出 JCXZ STOP ;最后一个数是偶数,即为最小偶数,退出 COMPARE1: MOV DX, DATABX ;取数组的下一个偶数 ADD BX, 2 TEST DX, 01H ;是偶数吗? JNZ NEXT ;不是,比较下一个数 CMP AX, DX

12、;(AX)(DX)吗? JLE NEXT MOV AX, DX ;(AX)(DX),则置换(AX)为最小偶数 NEXT: LOOP COMPARE1 STOP: RET 5.8 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写程序要求数一下值为3(即11B)的四分之一字节数,并将该数(即11B的个数)在终端上显示出来。 答:程序段如下: BEGIN: MOV DL, 0 ;计数初始值 MOV CX, 8 COMPARE: TEST AX, 03H ;是数03吗? JNZ NOEQUAL ;不是,转走 INC DL ;是,计数 NOEQUAL: ROR AX, 1 ;准备

13、判断下一个数 ROR AX, 1 LOOP COMPARE ADD DL, 0 ;将计数值转换为ASCII码 MOV AH, 2 ;进行显示 INT 21H STOP: RET 5.9 试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数。 答:程序段如下: BEGIN: MOV BX, 0 ;用于存放四位的16进制数 MOV CH, 4 MOV CL, 4 INPUT: SHL BX, CL ;将前面输入的数左移4位 MOV AH, 1 ;从键盘取数 INT 21H CMP AL, 30H ;0吗? JB INPUT ;不是0F的数重新输入 CMP A

14、L, 39H ;是09吗? JA AF ;不是,转AF的处理 AND AL, 0FH ;转换为:0000B1001B JMP BINARY AF: AND AL, 1101 1111B ;转换为大写字母 CMP AL, 41H ;又F吗? JA INPUT ;不是AF的数重新输入 AND AL, 0FH ;转换为:1010B1111B ADD AL, 9 BINARY: OR BL, AL ;将键盘输入的数进行组合 DEL CH JNZ INPUT DISPN: MOV CX, 16 ;将16位二进制数一位位地转换成ASCII码显示 DISP: MOV DL, 0 ROL BX, 1 RCL

15、DL, 1 OR DL, 30H MOV AH, 2 ;进行显示 INT 21H LOOP DISP STOP: RET 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:

16、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 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 NOMATCH: INC BX ;

17、指向ENG的下一个字母 DEC DX 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 ADD DL, 07H ;是“AF”所以要加7 STORE: MOV BX, DL ;转换结果存入DAT单元中 INC BX DEC CH JNZ DONE1 DISPLAY: LEA DX, DISP ;显示字符串程序(将DIS

18、P和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 BEGIN: LEA BX, BUFF MOV COUNT, 0 INPUT: MOV AH, 01 ;从键盘输入一个字符的功能调用 INT 21H MOV BX, AL INC BX CMP AL, $ ;是$结束符吗? J

19、NZ INPUT ;不是,继续输入 LEA BX, BUFF ;对非数字字符进行计数 NEXT: 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 DISP: ;16进制数显示程序段(省略) 5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。 答:程序如下: DSEG SEGMENT MEM DW

20、 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则结束

21、 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。 答:程序如下

22、: 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

23、 ;存在数字把CL的第5位置1 JMP EXIT GO_ON: INC SI LOOP REPEAT AND CL, 0DFH ;不存在数字把CL的第5位置0 EXIT: RET 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 ;- CS

24、EG 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 ;计算一个数的出现次数 JNE ADDR INC DX ADD SI, 2 LOOP COMP ADDR: CMP DX, COUNT ;此数出现的次数最多吗? J

25、LE DONE MOV COUNT, DX ;目前此数出现的次数最多,记下次数 MOV DATA, AX ;记下此数 DONE: LOOP NEXT ;准备取下一个数 MOV CX, COUNT ;出现最多的次数存入(CX) MOV AX, DATA ;出现最多的数存入(AX) RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;- END START 5.15 数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。 答:程序如下: DSEG SEGMENT n EQU 10

26、0H ;假设n=100H M DW n DUP (?) DATA DW ? ;M+2n单元 ADDR DW ? ;M+2(n+1)单元 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, n ;循环计数器 LEA DI, M MOV AX, DI ;取第一个数 MOV ADDR, DI ;记下绝对值最大的数的地址 CMP AX, 0 ;此数

27、是正数吗? JNS ZHEN ;是正数,即为绝对值,转去判断下一个数 NEG AX ;不是正数,变为其绝对值 ZHEN: MOV BX, DI CMP BX, 0 ;此数是正数吗? JNS COMP ;是正数,即为绝对值,转去比较绝对值大小 NEG BX ;不是正数,变为其绝对值 COMP: CMP AX, BX ;判断绝对值大小 JAE ADDRESS MOV AX, BX ;(AX)(BX),使(AX)中为绝对值最大的数 MOV ADDR, DI ;记下绝对值最大的数的地址 ADDRESS: ADD DI, 2 LOOP ZHEN MOV DATA, AX ;记下此数 RET MAIN E

28、NDP CSEG ENDS ;以上定义代码段 ;- END START 5.16 在首地址为DATA的字数组中存放着100H个16位补码数,试编写一个程序求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。 答:程序如下: DSEG SEGMENT DATA DW 100H 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

29、;给DS赋值 BEGIN: MOV CX, 100H ;循环计数器 MOV SI, 0 MOV BX, 0 ;和(DI),(BX)的初始值 MOV DI, 0 NEXT: MOV AX, DATA SI CWD ADD BX, AX ;求和 ADC DI, DX ;加上进位位 ADD SI, 2 LOOP NEXT MOV DX, DI ;将(DI),(BX)中的累加和放入(DX),(AX)中 MOV AX, BX MOV CX, 100H IDIV CX ;带符号数求平均值,放入(AX)中 MOV BX, 0 MOV SI, 0 COMP: CMP AX, DATA SI ;寻找小于平均值的

30、数 JLE NO INC BX ;小于平均值数的个数+1 NO: ADD SI, 2 LOOP COMP RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;- END START 5.17 试编制一个程序把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中。例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H。 答:程序如下: DSEG SEGMENT MEM DB 4 DUP (?) N DW 2A49H DSEG ENDS ;- CSEG SEGMENT MAIN PROC FAR

31、 ASSUME CS: CSEG, DS: DSEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX MOV AX, DSEG MOV DS, AX ;给DS赋值 BEGIN: MOV CH, 4 ;循环计数器 MOV CL, 4 MOV AX, N LEA BX, MEM ROTATE: MOV DL, AL ;从最低四位开始转换为ASCII码 AND DL, 0FH ADD DL, 30H CMP DL, 3AH ;是09吗? JL NEXT ADD DL, 07H ;是AF NEXT: MOV BX, DL ;转换的ASCII码送入MEM中 INC

32、BX ROR AX, CL ;准备转换下一位 DEC CH JNZ ROTATE RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;- END START 5.18 把0100D之间的30个数存入以GRADE为首地址的30字数组中,GRADE+i表示学号为i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。(提示:一个学生的名次等于成绩高于这个学生的人数加1。) 答:程序如下: DSEG SEGMENT GRADE DW 30 DUP (?) ;假设

33、已预先存好30名学生的成绩 RANK DW 30 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 DI, 0 MOV CX, 30 ;外循环计数器 LOOP1: PUSH CX MOV CX, 30 ;内循环计数器 MOV SI, 0 MOV AX, GRADE DI MOV DX, 1 ;起始名次为第1名 LOOP2: CMP

34、 GRADE SI, AX ;成绩比较 JBE GO_ON INC DX ;名次+1 GO_ON: ADD SI, 2 LOOP LOOP2 POP CX MOV RNAK DI, DX ;名次存入RANK数组 ADD DI, 2 LOOP LOOP1 RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;- END START 5.19 已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一程序把既在A中又在B中出现的整数存放于数组C中。 答:程序如下: DSEG SEGMENT A DW 15 DUP (?) B DW 20 DUP (?) C DW 1

35、5 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 MOV BX, 0 MOV CX, 15 ;外循环计数器 LOOP1: PUSH CX MOV CX, 20 ;内循环计数器 MOV DI, 0 MOV AX, A SI ;取A数组中的一个数 LOOP2: CMP B DI, AX ;和B数组中的数相等吗? JNE

36、 NO MOV C BX, AX ;相等存入C数组中 ADD BX, 2 NO: ADD DI, 2 LOOP LOOP2 ADD SI, 2 POP CX LOOP LOOP1 RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;- END START 5.20 设在A、B和C单元中分别存放着三个数。若三个数都不是0,则求出三数之和存放在D单元中;若其中有一个数为0,则把其它两单元也清0。请编写此程序。 答:程序如下: DSEG SEGMENT A DW ? B DW ? C DW ? D DW 0 DSEG ENDS ;- CSEG SEGMENT MAIN PROC FA

37、R ASSUME CS: CSEG, DS: DSEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX MOV AX, DSEG MOV DS, AX ;给DS赋值 BEGIN: CMP A, 0 JE NEXT CMP B, 0 JE NEXT CMP C, 0 JE NEXT MOV AX, A ADD AX, B ADD AX, C MOV D, AX JMP SHORT EXIT NEXT: MOV A, 0 MOV B, 0 MOV C, 0 EXIT: RET MAIN ENDP CSEG ENDS ;以上定义代码段 ;- END START

38、5.21 试编写一程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在终端上显示如下信息: (1) 如果三个数都不相等则显示0; (2) 如果三个数有二个数相等则显示1; (3) 如果三个数都相等则显示2。 答:程序如下: DSEG SEGMENT ARRAY DW 3 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: LE

39、A SI, ARRAY MOV DX, 0 ;(DX)用于存放所求的结果 MOV AX, SI MOV BX, SI+2 CMP AX, BX ;比较第一和第二两个数是否相等 JNE NEXT1 INC DX NEXT1: CMP SI+4, AX ;比较第一和第三两个数是否相等 JNE NEXT2 INC DX NEXT2: CMP SI+4, BX ;比较第二和第三两个数是否相等 JNE NUM INC DX NUM: CMP DX, 3 JL DISP DEC DX DISP: ADD DL, 30H ;转换为ASCII码 MOV AH, 2 ;显示一个字符 INT 21H RET MA

40、IN ENDP CSEG ENDS ;以上定义代码段 ;- END START 5.22 从键盘输入一系列字符(以回车符结束),并按字母、数字、及其它字符分类计数,最后显示出这三类的计数结果。 答:程序如下: DSEG SEGMENT ALPHABET DB 输入的字母字符个数为:, $ NUMBER DB 输入的数字字符个数为:, $ OTHER DB 输入的其它字符个数为:, $ CRLF DB 0DH, 0AH, $ 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 BX, 0 ;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号