汇编第五章课后题答案

合集下载

汇编 第五章基本结构程序设计参考答案.ppt

汇编 第五章基本结构程序设计参考答案.ppt

BUF DW 16
NUM DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
MOV DS, AX
MOV AX, [BX]
MOV BX , OFFSET AQTAB
MOV NUM , AX
MOV AX, BUF
INC BUF2
DATA ENDS
JMP EXIT
CODE SEGMENT
JIAOHUAN:MOV BUF1,BL
ASSUME DS:DATA
MOV BUF2,AL
ASSUME CS:CODE
EXIT: MOV AH,4CH
START:MOV AX,DATA
INT 21H
MOV DS,AX
MOV SI,OFFSET BUF
MOV CX, CNT
MOV AX, 0
MOV SUM, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
P102_58
DATA SEGMENT
X DW -123
Y DW 50
Z DW 1234H
DATA ENDS
CODE SEGMENT
CODE ENDS
MOV AL,BUF1
END START
MOV BL,BUF2
TEST BL,01H
JZ EXIT ;BUF2中为偶数
TEST AL,01H
JZ JIAOHUAN
;BUF1中偶数,BUF2为奇数
P102_57
DATA SEGMENT
BUF DB 30H,02H,10H,11H,56H,78H,65H,54H,85H,19H

汇编第五章课后题答案

汇编第五章课后题答案

1.从屏幕上输入小写字母,转化为大写字母输出(解法1)DATA SEGMENTMESSAGE DB "ENTER A STRING:",0AH,0DH,'$' MAXLENGTH DB 50,?,50 DUP(?) ;每次最多可以输入49个字符DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXLEA DX,MESSAGE ;输出ENTER A STRINGMOV AH,09HINT 21HLEA DX,MAXLENGTH ;输入字符串MOV AH,0AH ;键盘输入到缓冲区,DS:DX=缓冲区首址INT 21H ;(DS:DX)=缓冲区最大字符数,(DS:DX+1)=实际输入的字符数MOV AH,02H ;输出回车换行MOV DL,0AHINT 21HMOV AH,02HMOV DL,0DHINT 21HMOV CL,MAXLENGTH+1;把字符的实际长度放入寄存器CLMOV CH,0MOV BH,02HLEA SI,MAXLENGTH+2;取字符串的基地址放入SIXUN:MOV AL,[SI]CMP AL,'Z'JBE S1 ;小于等于'Z'转移JMP S3S1:CMP AL,'A'JAE DA ;大于等于'A'转移JMP OUTPUTDA:ADD AL,20HJMP OUTPUTS3:CMP AL,'z' ;小于等于小Z转移JBE S4S4:CMP AL,'a' ;大于等于小a转移JAE XIAOJMP OUTPUTXIAO:SUB AL,32JMP OUTPUTOUTPUT:MOV DL,ALMOV AH,02H ;显示输出INT 21HINC SILOOP XUNMOV AH,4CHINT 21HCODE ENDSEND START(解法2);将输入的小写字母转化为大写字母输出,输入回车结束CODE SEGMENTASSUME CS:CODEBEGIN:MOV AH,01HINT 21HCMP AL,0DH ;ASCII OF CARRIAGE RETURNJE EXITCMP AL,61H ;ASCII OF 'a'JB STOPCMP AL,7AH ;ASCII OF 'z'JA STOPSUB AL,20HSTOP:MOV DL,ALMOV AH,2INT 21HJMP BEGINEXIT:MOV AH,4CHINT 21HRETCODE ENDSEND BEGIN2.输入一个字符,找出它的前导字符和后续字符,并按顺序显示这三个字符.(解法1)CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART:PUSH DSXOR AX,AXPUSH AXMOV AH,01HINT 21HCMP AL,61HJB EXITCMP AL,7AHJA EXITMOV CL,ALDEC ALMOV DL,ALMOV AH,02HINT 21HMOV DL,CLMOV AH,02HINT 21HAND AL,01HINC CLMOV DL,CLMOV AH,02HINT 21HEXIT:MOV AX,4C00HINT 21HRETMAIN ENDPCODE ENDSEND START(解法2).MODEL SMALL.STACK 200H.DATAimsg db 'Input:$' ;输入提示信息omsg db 0Dh,0Ah,'Output:$' ;输出提示信息string db 3 dup(0),'$' ;存放三个字符.CODESTART:mov ax,@datamov ds,axlea dx,imsgmov ah,9int 21hmov ah,1int 21hlea di,stringdec almov cx,3s:mov [di],alinc diinc alloop slea dx,omsgmov ah,9int 21hlea dx,stringmov ah,9int 21hMOV AH,07HINT 21HMOV AX,4C00HINT 21HEND START3.将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL,BL,CL,DL中.MODEL SMALL,C.CODE.STARTUPMOV AX,3456HMOV BX,AXMOV CL,4ROL AX,CLMOV BX,AXAND AL,0FH ;AL中是15,14,13,12ROL BX,CLMOV DX,BXAND BL,0FH ;BL中是11,10,9,8AND AH,0FHMOV CH,AH ;CH中是7,6,5,4MOV CL,CHAND DH,0FH ;DH中是3,2,1,0MOV DL,DH.EXIT 0END4.试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示'MATCH',若不相同则显示'NOT MATCH'..MODEL SMALL.DATASTRING1 DB "LDSKFJSLDKF"LENG1 EQU $-STRING1STRING2 DB "LDSKFJSLDKP"LENG2 EQU $-STRING2MSG1 DB "MATCH",24HMSG2 DB "NOT MATCH",24H.CODEMOV AX,@DATAMOV DS,AXMOV ES,AXMOV BX,LENG1MOV CX,LENG2CMP BX,CXJNZ NOT_MATCHLEA SI,STRING1LEA DI,STRING2CLDREPZ CMPSBJZ _MATCHNOT_MATCH:LEA DX,MSG2MOV AH,09HINT 21HJMP _EXIT_MATCH:LEA DX,MSG1MOV AH,09HINT 21H_EXIT:MOV AH,07HINT 21HMOV AX,4C00HINT 21HEND5.要求能从键盘接收一个个位数,然后响铃N次(响铃的ASCII码为07) .MODEL SMALL.DATAMSG DB "YOUR INPUT IS NOT 1-9!",24H .CODE.STARTUPMOV AH,0INT 16H ;接收一个键盘输入CMP AL,31HJB ERRORCMP AL,39HJA ERRORMOV CL,ALSUB CL,30HCYCLE:MOV DL,7MOV AH,09HINT 21HMOV AH,07H ;按一下键就响一下铃声INT 21HLOOP CYCLEJMP _EXITERROR:LEA DX,MSGMOV AH,09HINT 21HMOV AH,07HINT 21H_EXIT:.EXIT 0END6.编写程序,将一个包含有20个数据的数组M分成两个数组,正数数组P 和负数数组N,并分别把这两个数组中数据的个数显示出来..MODEL SMALL,C.DATAINDEX DB 12,-20,4,05H,11H,2AH,-11,2,3,09HDB -3,0,-9,44H,32H,33H,34H,-5,40H,22HP DB 0,20 DUP(0) ;存放正数N DB 0,20 DUP(0) ;存放负数.CODEDISPLAY PROC NEAR USES AXAND AH,0FH.IF AH>= 0AH && AH<= 0FHADD AH,07H.ENDIFADD AH,30HMOV DL,AHMOV AH,02HINT 21HMOV AH,07HINT 21HRETDISPLAY ENDP.STARTUPLEA DI,P+1LEA SI,N+1LEA BX,INDEXMOV CX,14HCYCLE:CMP BYTE PTR [BX],0JG NOSIGNINC AL ;AL中存放负数MOV DL,BYTE PTR [BX]MOV BYTE PTR DS:[DI],DLINC DIINC BXLOOP CYCLENOSIGN:INC AH ;AH中存放正数MOV DL,BYTE PTR [BX]MOV BYTE PTR DS:[SI],DLINC SIINC BXLOOP CYCLEMOV P,AHMOV N,ALCALL DISPLAYMOV AH,ALCALL DISPLAY.EXIT 0END7.试编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中.datarea segmentdata dw 10,2,4,8,7,7,69,65,55,89,95dw 25,39,77,88,25,1,47,88,8,8,77,88,22 count=($-data)/2num dw 0ffeehdatarea endscode segmentmain proc farassume cs:code,ds:datareapush dsmov ax,0push axbegin:mov ax,datareamov ds,axmov bl,2mov cx,countlea si,dataA:mov ax,[si]mov dx,axdiv blcmp ah,0jne circlecmp dx,numjb Bcircle:add si,2lopa:loop Aexit:mov ax,numretB:mov num,dxjmp lopamain endpcode endsend8.把AX中存放的16位二进制数K看作是8个二进制的"四分之一字节".试编写一程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来.MOV CX,8MOV DL,0NEXT3:ROR AX,1JNC NEXT1ROR AX,1JNC NEXT2INC DLNEXT2:LOOP NEXT3ADD DL, 30HMOV AH, 2INT 21HMOV AH, 4CHINT 21HNEXT1:ROR AX, 1JMP NEXT29.试编写一汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中..MODEL SMALL,C.DATA_DATA DW 100 DUP(?).CODE.STARTUPLEA SI,_DATAMOV AX,[SI]MOV CX,100CYCLE:ADD SI,2.IF AX< [SI]MOV AX,[SI].ENDIFLOOP CYCLE.EXIT 010.设有一段英文,其字符变量名为ENG,并以$字符结束,试编写一程序,查对单词SUN在该文中的出现次数,并以格式"SUN****"显示出次数..MODEL SMALL.386.DATAENG DB 'SUN','SUN JAVA',24HMESSAGE DB 'SUN:','$' .STACK 100H.CODEMAIN PROC FAR START:PUSH DSAND AX,0PUSH AXMOV AX,@DATAMOV DS,AXMOV AX,0HMOV SI,1HSUBSI1:SUB SI,1HSUBSI2:SUB SI,1H COMPARES:ADD SI,1HMOV DL,ENG[SI]CMP DL,24HJE PRINTCMP DL,53HJNE COMPARES COMPAREU:ADD SI,1HMOV DL,ENG[SI]CMP DL,55HJNE SUBSI2 COMPAREN:ADD SI,1HMOV DL,ENG[SI]CMP DL,4EHJNE SUBSI1INC AXJMP COMPARESPRINT:LEA DX,MESSAGEPUSH AXMOV AH,09HINT 21HPOP AXCALL SHOWNUMBER EXIT:RETMAIN ENDP SHOWNUMBER PROC NEAR COVERNUM:DAAMOV DX,AXMOV CL,4HSHOW:ROL DX,4HPUSH DXAND DX,0FHADD DX,30HMOV AH,02HINT 21HPOP DXLOOP SHOWRETSHOWNUMBER ENDPEND START11.从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果..MODEL SMALL.386.CODEMAIN PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV CX,0INPUT:MOV AH,1HINT 21HCOMPARE:CMP AL,24HJE PRINTCMP AL,30HJL ADDCOUNTCMP AL,39HJG ADDCOUNTADDCOUNT:ADD AX,1HJMP INPUTCALL SHOWNUMBEREXIT: RETMAIN ENDPSHOWNUMBER PROC NEARCOVERNUM:DAAMOV DX,AXMOV CL,2HSHOW:ROL DL,4HPUSH DXAND DL,0FHADD DL,30HMOV AH,02HINT 21HPOP DXLOOP SHOWRETSHOWNUMBER ENDPEND START12.有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零..model small.386.stack 100Hmem dw12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7 ,5,1,2,0,2,4,0,2,54,0,12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1, 2,0,2,4,0,2,54,0,45,7,5,1,2,0,2,4,0,2.codeMAIN PROC FARstart:push dsand ax,0push axmov ax,@datamov ds,axmov ax,0Hmov bx,64Hmov cx,64Hmov si,0FFFEHrepeat:ADD si,2Hcmp MEM[si],0HJE callsloop repeatcalls:INC axcall sortcmp ax,1HJE lastValueDEC cxjmp repeatexit :retlastValue:mov mem[bx],0HDEC cxjmp repeatMAIN ENDPsort PROC NEARpush cxpush sisub si,2Hs:add si,2Hmov dx,mem[si]mov mem[si+2],dxloop sreturn:pop sipop cxretsort ENDPEND start13.在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字.如有,则把CL的第5位置1,否则将该位置0. DSEG SEGMENTA DW ?B DW ?DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEG START:PUSH DSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AXBEGIN:MOV AX, AMOV AX, BXOR AX, BXTEST AX, 0001JZ EXITXCHG BX, AMOV B, BXJMP EXITCLASS:TEST BX, 0001JZ EXITINC BINC AEXIT:RETMAIN ENDPCSEG ENDSEND START14.在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放在AX和CX中.DATA SEGMENTTABLE DW 100H DUP (?)MDATA DW ? ; 存放出现次数最多的数COUNT DW 0 ; 存放出现次数DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX, 100HMOV DI, 0 ; DI为数组TABLE的指针NEXT:MOV DX, 0MOV SI, 0MOV AX, TABLE[DI]MOV CX, 100HCOMP:CMP TABLE[SI], AXJNE _ADDRINC DX_ADDR:ADD SI, 2LOOP COMPCMP DX, COUNTJLE CHANGMOV COUNT, DXMOV MDATA, AXCHANG:ADD DI, 2DEC BXJNZ NEXTMOV CX, COUNTMOV AX, MDATAMOV AX,4C00HINT 21HCODE ENDSEND START15.数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M 中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中.DSEG SEGMENTX DW -4FX DW ?DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART:PUSH DSPUSH AXMOV AX, DSEGMOV DS, AXBEGIN:CMP X, 5JG A0CMP X, -5JL A0MOV BX,1SUB BX, XMOV FX, BXRETA0:MOV FX, 0RETMAIN ENDPCSEG ENDSEND START16.在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一程序,求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中..MODEL SMALL.STACK 200H.DATADA_TA DW 100H DUP(?).CODE.STARTUPXOR BX,BXXOR DX,DXMOV CX,100HLEA SI,DA_TACYCLE:ADD AX,[SI]ADC DX,0INC SIINC SIDEC CXCMP CX,0JNZ CYCLEMOV CX,100HDIV CX ;计算平均值,存放在AX中.LEA SI,DA_TACOMPARE:CMP AX,[SI]JA NEXT ;计算小于AX的值,其个数存放在BX中INC BXNEXT:INC SIINC SIDEC CXCMP CX,0JNZ COMPARE.EXIT 0END17.试编制一个程序,把AX中的16进制数转化为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中.例如:当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H.;MODE=DOSDATA SEGMENTSOURCE DW 2A49HMEM DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,SOURCELEA BX,MEMMOV CX,4LB:MOV AX,DXAND AX,000FHCMP AL,10JC ADADD AL,7AD:ADD AL,30HMOV [BX],ALINC BXSHR DX,1SHR DX,1SHR DX,1SHR DX,1LOOP LBMOV AH,4CHINT 21HCODE ENDSEND START18.把0-100D之间的30个数存入以GRADE为首地址的30个字数组中,GRADE+i表示学号为i+1的学生成绩.另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次.编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中.(提示:一个学生的名次等于成绩高于这个学生的人数加1)DSEG SEGMENTGRADE DW 30 DUP(?)RANK DW 30 DUP(0)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART: PUSH DSSUB AX,AXPUSH AXMOV AX,DSEGMOV DS,AXBEGIN:MOV DI,0MOV CX,30LOOP1:PUSH CXMOV CX,30MOV SI,0MOV AX,GRADE[DI]MOV DX,0LOOP2:CMP GRAD[SI],AXJBE GOONINC DXGOON :ADD SI,2LOOP LOOP2POP CXINC DXMOV RANK[DI],DXADD DI,2LOOP LOOP1RETMAIN ENDPCSEG ENDSEND START19.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数.试编制一程序,把既在A中又在B中出现的整数存放于数组C中。

新版汇编语言程序设计1-5章【课后答案】

新版汇编语言程序设计1-5章【课后答案】

新版汇编语言程序设计【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。

〔解答〕CPU:包括运算器、控制器和寄存器组。

运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。

存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。

外部设备:实现人机交换和机间的通信。

〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU 可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。

辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。

RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。

存储器由大量存储单元组成。

为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。

KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。

〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。

〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。

汇编语言程序设计实验指导及习题解答-第五章

汇编语言程序设计实验指导及习题解答-第五章

DW 1,2,3,4,5,6,7,8,9,10 DW($-ARY1)/2 DW ? DW 10,20,30,40,50,60,70,80 DW($-ARY2)/2 DW ? DW 100,200,300,400,500,600 DW($-ARY3)/2 DW ?
;构造数组 1 的地址表
97
;通过寄存器传递地址表的首地址
;通过寄存器传递地址表的首地址 ;求和数组 2 并保存结果 ;构造数组 3 的地址表
MOV TABLE+2,OFFSET COUNT3 MOV TABLE+4,OFFSET SUM3 LEA BX,TABLE CALL ARY-SUM MOV AX, 4C00H INT 21H ARY-SUM PROC NEAR PUSH AX PUSH PUSH PUSH MOV MOV MOV MOV XOR ADD ADD CX SI DI SI,[BX] DI,[BX+2] CX,[DI] DI,[BX+4] AX,AX AX,[SI] SI,2
TRAN
;分离出个位数 ;分离出十位数
MOV ROR MOV MUL ADD
CL,04H AL,CL BH,0AH BH AL,BL
;将十位数移至低 4 位 ;十位数乘以 10 ;乘积与个位数相加
TRAN
POP CX POP BX POPF RET ENDP END START
2.通过地址表传递参数地址 有时直接传递参数本身不能方便地实现所要求功能,需要通过地址表传递参数地址的 方法实现参数传递。具体方法是先建立一个地址表,该表由参数地址构成。然后把表的首 地址通过寄存器或堆栈传递给子程序。 【例 5.4】 计算 ARY1、ARY2、ARY3 三个数组和,并把各自的和分别放入 SUM1、 SUM2、SUM3 单元,其数组元素及结果均为字型数据。 显然数组求和应该用子程序完成,这样做使得代码真正共享。但在子程序中不能直接 引用数组变量名,否则不能做到通用,在这种情况下可以通过传递参数地址的方法实现最 终的参数传递。本例用数组首地址、元素个数的地址、结果地址构成一个地址表,通过寄 存器把表的首地址传递给子程序,子程序通过地址表的参数地址访问到所需参数。

汇编语言第5章作业答案

汇编语言第5章作业答案

习题51.试说明以下指令中各操作数的寻址方式,如果是存储器寻址,请给出其EA计算公式,并说明所使用的段寄存器。

(1)MOV AL,08H 源操作数:立即数寻址目的操作数:寄存器寻址(2)MOV [0120H],BL 源操作数:寄存器寻址目的操作数:直接寻址,EA=0120H,使用DS段寄存器(3)ADD [BX],AL 源操作数:寄存器寻址目的操作数:寄存器间接寻址,EA=(BX),使用DS段寄存器(4)PUSH [SI]0200H 源操作数:变址寻址,EA=(SI)+0200H,使用DS段寄存器目的操作数:隐含寻址(指令中未直接体现)(5)SUB AX,[BP] 源操作数:寄存器间接寻址,EA=(BP),使用SS段寄存器目的操作数:寄存器寻址(6)AND V AR1+4,DL 源操作数:寄存器寻址目的操作数:直接寻址,EA=V AR1+4,使用DS段寄存器(7)PUSHF 源操作数、目的操作数均为隐含寻址(8)MOV ES : [BX]0100H, AL 源操作数:寄存器寻址目的操作数:基址寻址,EA=(BX)+0100H,用ES段寄存器(9)ADC BYTE PTR [BP][SI]0210H,45H源操作数:立即数寻址目的操作数:基址变址寻址,EA=(BP)+(SI)+0210H,使用SS段寄存器(10)OR ARRY[BX][DI],CL源操作数:寄存器寻址目的操作数:基址变址寻址,EA=(BX)+(DI)+ARRY,使用DS段寄存器2.试分析下列汇编指令是否存在语法错误,如果有语法错误存在,请说明是怎样的错误。

(1)PUSH 8243H错误,单操作数指令不能使用立即数(2)POP AL错误,进栈、出栈指令的操作数应为16位(3)MOV AL,6543H错误,源、目的操作数类型不匹配(4)ADD [0100H],64H错误,目的操作数应使用PTR运算符指出类型,否则具有二义性正确的写法:ADD BYTE PTR [0100H],64H,(或使用WORD PTR)(5)ADC V AR1,V AR2错误,8086指令系统的双操作数指令中,必须有一个是寄存器,不能两个操作数同为内存单元(6)MOV DS,ES错误,段寄存器间不能使用MOV指令直接传递数据,必须通过通用寄存器作为中转(7)MOV DS,0620H错误,使用MOV指令向段寄存器传递数据时,不能使用立即数(8)LEA BX,AX错误,L EA指令的源操作数必须为内存单元(9)DEC AL,AH错误,DEC指令为单操作数指令(10)SHR BL,3错误,当移位次数大于1时,在移位指令中特定使用CL寄存器给出移位次数正确的写法:MOV CL, 3SHR BL, CL3.试说明分别执行下列各组指令后,CF、OF、AF、ZF、SF、PF这六个状态标志分别是怎样的取值。

第5章 习题及答案

第5章 习题及答案

第五章 汇编语言程序设计1、画图说明下列语句所分配的存储器空间及初始化的数据值。

难度:2(1) BYTE_VAR DB ‘BYTE’,12,-12H ,3 DUP(0,2 DUP(1,2),7) (2) WORD_VAR DW 3 DUP(0,1,2),7,-5,’BY’,’TE’,256H 答:(1) (2)07H BYTE_V AR 42H WORD_V AR 00H 00H 59H 00H FBH 54H 01H FFH 45H 00H 59H 0CH 02H 42H EEH 00H 45H 00H 00H 54H 01H 00H 56H 02H 01H 02H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H07H00H2、假设程序中的数据定义如下: PARTNO DW ?PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $- PARTNO 问:PLENTH 的值为多少?他表示什么意义? 答:PLENTH 的值为22,它表示当前已分配单元空间。

《微型计算机原理》第5章习题与解答3、有符号定义语句如下:难度:2BUF DB 1,2,3,’123’EBUF DB 0L EQU EBUF-BUF问:L的值是多少?答:L的值为6;4、假设成序中的数据定义如下:难度:2LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE_LIST DB 1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址存入BX。

(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。

(3)写一条伪指令定义符使CODE_LENGTH的值等于 CODE_LIST域的实际长度。

《汇编语言》各章习题答案

《汇编语言》各章习题答案

汇编语言各章习题答案习题一答案:1.1无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH1.2 5E8AH,0BE6H,3DEH,4940H1.3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -1171.4 00101001+01010011=01111100+00000110=10000010=82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=2071.5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H1.6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 1.7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码1.8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H(4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H1.9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=11.10回车、换行、响铃、ESC键、空格键、@、P、p习题二答案:2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2.10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP2.11字节单元保存8位数,字单元保存16位数。

汇编语言程序设计课后答案

汇编语言程序设计课后答案

汇编语言程序设计课后答案第二章(更新完毕~)1。

在80X86微机的输入输出指令中,I/O端口号通常是由DX寄存器提供的,但是有时也可以在指令中直接指定00---FFH的端口号。

试问,可直接由指令指定的I/0端口数~解答:有256个~~ 书上有原话~~可以找到~~2。

有两个16位字节1EE5H和2A3CH分别存放在80X86微机的存储器的000B0H 和000B3H单元中,请用图表示出它们在存储器里的存放情况。

解答:如下图.第一个络子为000B0H字单元,注意,是字单元~~第五个格子为000B3H字单元~,学计算机的,竟然连个表格也做不好!3. 图在书上,我就不画了,太麻烦~~直接答吧~解答: 30022H字节单元内容: ABH 30024H字节单元内容: EFH 30021H字单元内容: AB34H 30022H字单元内容: CDABH4.对了,看这个的人.,肯定都有那本书,所以,以后我就不抄题目哈~~~解答: 这三个物理地址都是3017AH,正好说明了不同的段地址和偏移地址对应同一物理地址~~5.解答: CS+IP 第一个字的物理地址为: 0AAA40H6.解答: 图,实在不知道怎么画,待我想办法~~ 条件标志OF,SF,ZF,CF,的值依次为:0,0,0,07。

下列操作可使用那些寄存器?(1)加法和减法AX ,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH ,AL ,.等~~(2)循环计数CX(3)乘法和除法DX,AX,AH,AL(4)保存段地址CS ,DS,ES,SS(5)表示运算结果为O FLAGS(6)将要执行的指令地址IP(7) 将要从堆栈取出数据的地址BP,SP,SS8。

可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP9。

一一对应;5--A 4--B 2--C 3--D 12--E 9--F 11--G 10--H 13--I 8--J 7--K 6---L 1--M 15--N 14--O第三章1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.从屏幕上输入小写字母,转化为大写字母输出(解法1)DATA SEGMENTMESSAGE DB "ENTER A STRING:",0AH,0DH,'$' MAXLENGTH DB 50,?,50 DUP(?) ;每次最多可以输入49个字符DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXLEA DX,MESSAGE ;输出ENTER A STRINGMOV AH,09HINT 21HLEA DX,MAXLENGTH ;输入字符串MOV AH,0AH ;键盘输入到缓冲区,DS:DX=缓冲区首址INT 21H ;(DS:DX)=缓冲区最大字符数,(DS:DX+1)=实际输入的字符数MOV AH,02H ;输出回车换行MOV DL,0AHINT 21HMOV AH,02HMOV DL,0DHINT 21HMOV CL,MAXLENGTH+1;把字符的实际长度放入寄存器CLMOV CH,0MOV BH,02HLEA SI,MAXLENGTH+2;取字符串的基地址放入SIXUN:MOV AL,[SI]CMP AL,'Z'JBE S1 ;小于等于'Z'转移JMP S3S1:CMP AL,'A'JAE DA ;大于等于'A'转移JMP OUTPUTDA:ADD AL,20HJMP OUTPUTS3:CMP AL,'z' ;小于等于小Z转移JBE S4S4:CMP AL,'a' ;大于等于小a转移JAE XIAOJMP OUTPUTXIAO:SUB AL,32JMP OUTPUTOUTPUT:MOV DL,ALMOV AH,02H ;显示输出INT 21HINC SILOOP XUNMOV AH,4CHINT 21HCODE ENDSEND START(解法2);将输入的小写字母转化为大写字母输出,输入回车结束CODE SEGMENTASSUME CS:CODEBEGIN:MOV AH,01HINT 21HCMP AL,0DH ;ASCII OF CARRIAGE RETURNJE EXITCMP AL,61H ;ASCII OF 'a'JB STOPCMP AL,7AH ;ASCII OF 'z'JA STOPSUB AL,20HSTOP:MOV DL,ALMOV AH,2INT 21HJMP BEGINEXIT:MOV AH,4CHINT 21HRETCODE ENDSEND BEGIN2.输入一个字符,找出它的前导字符和后续字符,并按顺序显示这三个字符.(解法1)CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART:PUSH DSXOR AX,AXPUSH AXMOV AH,01HINT 21HCMP AL,61HJB EXITCMP AL,7AHJA EXITMOV CL,ALDEC ALMOV DL,ALMOV AH,02HINT 21HMOV DL,CLMOV AH,02HINT 21HAND AL,01HINC CLMOV DL,CLMOV AH,02HINT 21HEXIT:MOV AX,4C00HINT 21HRETMAIN ENDPCODE ENDSEND START(解法2).MODEL SMALL.STACK 200H.DATAimsg db 'Input:$' ;输入提示信息omsg db 0Dh,0Ah,'Output:$' ;输出提示信息string db 3 dup(0),'$' ;存放三个字符.CODESTART:mov ax,@datamov ds,axlea dx,imsgmov ah,9int 21hmov ah,1int 21hlea di,stringdec almov cx,3s:mov [di],alinc diinc alloop slea dx,omsgmov ah,9int 21hlea dx,stringmov ah,9int 21hMOV AH,07HINT 21HMOV AX,4C00HINT 21HEND START3.将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL,BL,CL,DL中.MODEL SMALL,C.CODE.STARTUPMOV AX,3456HMOV BX,AXMOV CL,4ROL AX,CLMOV BX,AXAND AL,0FH ;AL中是15,14,13,12ROL BX,CLMOV DX,BXAND BL,0FH ;BL中是11,10,9,8AND AH,0FHMOV CH,AH ;CH中是7,6,5,4MOV CL,CHAND DH,0FH ;DH中是3,2,1,0MOV DL,DH.EXIT 0END4.试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示'MATCH',若不相同则显示'NOT MATCH'..MODEL SMALL.DATASTRING1 DB "LDSKFJSLDKF"LENG1 EQU $-STRING1STRING2 DB "LDSKFJSLDKP"LENG2 EQU $-STRING2MSG1 DB "MATCH",24HMSG2 DB "NOT MATCH",24H.CODEMOV AX,@DATAMOV DS,AXMOV ES,AXMOV BX,LENG1MOV CX,LENG2CMP BX,CXJNZ NOT_MATCHLEA SI,STRING1LEA DI,STRING2CLDREPZ CMPSBJZ _MATCHNOT_MATCH:LEA DX,MSG2MOV AH,09HINT 21HJMP _EXIT_MATCH:LEA DX,MSG1MOV AH,09HINT 21H_EXIT:MOV AH,07HINT 21HMOV AX,4C00HINT 21HEND5.要求能从键盘接收一个个位数,然后响铃N次(响铃的ASCII码为07) .MODEL SMALL.DATAMSG DB "YOUR INPUT IS NOT 1-9!",24H .CODE.STARTUPMOV AH,0INT 16H ;接收一个键盘输入CMP AL,31HJB ERRORCMP AL,39HJA ERRORMOV CL,ALSUB CL,30HCYCLE:MOV DL,7MOV AH,09HINT 21HMOV AH,07H ;按一下键就响一下铃声INT 21HLOOP CYCLEJMP _EXITERROR:LEA DX,MSGMOV AH,09HINT 21HMOV AH,07HINT 21H_EXIT:.EXIT 0END6.编写程序,将一个包含有20个数据的数组M分成两个数组,正数数组P 和负数数组N,并分别把这两个数组中数据的个数显示出来..MODEL SMALL,C.DATAINDEX DB 12,-20,4,05H,11H,2AH,-11,2,3,09HDB -3,0,-9,44H,32H,33H,34H,-5,40H,22HP DB 0,20 DUP(0) ;存放正数N DB 0,20 DUP(0) ;存放负数.CODEDISPLAY PROC NEAR USES AXAND AH,0FH.IF AH>= 0AH && AH<= 0FHADD AH,07H.ENDIFADD AH,30HMOV DL,AHMOV AH,02HINT 21HMOV AH,07HINT 21HRETDISPLAY ENDP.STARTUPLEA DI,P+1LEA SI,N+1LEA BX,INDEXMOV CX,14HCYCLE:CMP BYTE PTR [BX],0JG NOSIGNINC AL ;AL中存放负数MOV DL,BYTE PTR [BX]MOV BYTE PTR DS:[DI],DLINC DIINC BXLOOP CYCLENOSIGN:INC AH ;AH中存放正数MOV DL,BYTE PTR [BX]MOV BYTE PTR DS:[SI],DLINC SIINC BXLOOP CYCLEMOV P,AHMOV N,ALCALL DISPLAYMOV AH,ALCALL DISPLAY.EXIT 0END7.试编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中.datarea segmentdata dw 10,2,4,8,7,7,69,65,55,89,95dw 25,39,77,88,25,1,47,88,8,8,77,88,22 count=($-data)/2num dw 0ffeehdatarea endscode segmentmain proc farassume cs:code,ds:datareapush dsmov ax,0push axbegin:mov ax,datareamov ds,axmov bl,2mov cx,countlea si,dataA:mov ax,[si]mov dx,axdiv blcmp ah,0jne circlecmp dx,numjb Bcircle:add si,2lopa:loop Aexit:mov ax,numretB:mov num,dxjmp lopamain endpcode endsend8.把AX中存放的16位二进制数K看作是8个二进制的"四分之一字节".试编写一程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来.MOV CX,8MOV DL,0NEXT3:ROR AX,1JNC NEXT1ROR AX,1JNC NEXT2INC DLNEXT2:LOOP NEXT3ADD DL, 30HMOV AH, 2INT 21HMOV AH, 4CHINT 21HNEXT1:ROR AX, 1JMP NEXT29.试编写一汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中..MODEL SMALL,C.DATA_DATA DW 100 DUP(?).CODE.STARTUPLEA SI,_DATAMOV AX,[SI]MOV CX,100CYCLE:ADD SI,2.IF AX< [SI]MOV AX,[SI].ENDIFLOOP CYCLE.EXIT 010.设有一段英文,其字符变量名为ENG,并以$字符结束,试编写一程序,查对单词SUN在该文中的出现次数,并以格式"SUN****"显示出次数..MODEL SMALL.386.DATAENG DB 'SUN','SUN JAVA',24HMESSAGE DB 'SUN:','$' .STACK 100H.CODEMAIN PROC FAR START:PUSH DSAND AX,0PUSH AXMOV AX,@DATAMOV DS,AXMOV AX,0HMOV SI,1HSUBSI1:SUB SI,1HSUBSI2:SUB SI,1H COMPARES:ADD SI,1HMOV DL,ENG[SI]CMP DL,24HJE PRINTCMP DL,53HJNE COMPARES COMPAREU:ADD SI,1HMOV DL,ENG[SI]CMP DL,55HJNE SUBSI2 COMPAREN:ADD SI,1HMOV DL,ENG[SI]CMP DL,4EHJNE SUBSI1INC AXJMP COMPARESPRINT:LEA DX,MESSAGEPUSH AXMOV AH,09HINT 21HPOP AXCALL SHOWNUMBER EXIT:RETMAIN ENDP SHOWNUMBER PROC NEAR COVERNUM:DAAMOV DX,AXMOV CL,4HSHOW:ROL DX,4HPUSH DXAND DX,0FHADD DX,30HMOV AH,02HINT 21HPOP DXLOOP SHOWRETSHOWNUMBER ENDPEND START11.从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果..MODEL SMALL.386.CODEMAIN PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV CX,0INPUT:MOV AH,1HINT 21HCOMPARE:CMP AL,24HJE PRINTCMP AL,30HJL ADDCOUNTCMP AL,39HJG ADDCOUNTADDCOUNT:ADD AX,1HJMP INPUTCALL SHOWNUMBEREXIT: RETMAIN ENDPSHOWNUMBER PROC NEARCOVERNUM:DAAMOV DX,AXMOV CL,2HSHOW:ROL DL,4HPUSH DXAND DL,0FHADD DL,30HMOV AH,02HINT 21HPOP DXLOOP SHOWRETSHOWNUMBER ENDPEND START12.有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零..model small.386.stack 100Hmem dw12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7 ,5,1,2,0,2,4,0,2,54,0,12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1, 2,0,2,4,0,2,54,0,45,7,5,1,2,0,2,4,0,2.codeMAIN PROC FARstart:push dsand ax,0push axmov ax,@datamov ds,axmov ax,0Hmov bx,64Hmov cx,64Hmov si,0FFFEHrepeat:ADD si,2Hcmp MEM[si],0HJE callsloop repeatcalls:INC axcall sortcmp ax,1HJE lastValueDEC cxjmp repeatexit :retlastValue:mov mem[bx],0HDEC cxjmp repeatMAIN ENDPsort PROC NEARpush cxpush sisub si,2Hs:add si,2Hmov dx,mem[si]mov mem[si+2],dxloop sreturn:pop sipop cxretsort ENDPEND start13.在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字.如有,则把CL的第5位置1,否则将该位置0. DSEG SEGMENTA DW ?B DW ?DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEG START:PUSH DSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AXBEGIN:MOV AX, AMOV AX, BXOR AX, BXTEST AX, 0001JZ EXITXCHG BX, AMOV B, BXJMP EXITCLASS:TEST BX, 0001JZ EXITINC BINC AEXIT:RETMAIN ENDPCSEG ENDSEND START14.在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放在AX和CX中.DATA SEGMENTTABLE DW 100H DUP (?)MDATA DW ? ; 存放出现次数最多的数COUNT DW 0 ; 存放出现次数DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX, 100HMOV DI, 0 ; DI为数组TABLE的指针NEXT:MOV DX, 0MOV SI, 0MOV AX, TABLE[DI]MOV CX, 100HCOMP:CMP TABLE[SI], AXJNE _ADDRINC DX_ADDR:ADD SI, 2LOOP COMPCMP DX, COUNTJLE CHANGMOV COUNT, DXMOV MDATA, AXCHANG:ADD DI, 2DEC BXJNZ NEXTMOV CX, COUNTMOV AX, MDATAMOV AX,4C00HINT 21HCODE ENDSEND START15.数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M 中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中.DSEG SEGMENTX DW -4FX DW ?DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART:PUSH DSPUSH AXMOV AX, DSEGMOV DS, AXBEGIN:CMP X, 5JG A0CMP X, -5JL A0MOV BX,1SUB BX, XMOV FX, BXRETA0:MOV FX, 0RETMAIN ENDPCSEG ENDSEND START16.在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一程序,求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中..MODEL SMALL.STACK 200H.DATADA_TA DW 100H DUP(?).CODE.STARTUPXOR BX,BXXOR DX,DXMOV CX,100HLEA SI,DA_TACYCLE:ADD AX,[SI]ADC DX,0INC SIINC SIDEC CXCMP CX,0JNZ CYCLEMOV CX,100HDIV CX ;计算平均值,存放在AX中.LEA SI,DA_TACOMPARE:CMP AX,[SI]JA NEXT ;计算小于AX的值,其个数存放在BX中INC BXNEXT:INC SIINC SIDEC CXCMP CX,0JNZ COMPARE.EXIT 0END17.试编制一个程序,把AX中的16进制数转化为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中.例如:当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H.;MODE=DOSDATA SEGMENTSOURCE DW 2A49HMEM DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,SOURCELEA BX,MEMMOV CX,4LB:MOV AX,DXAND AX,000FHCMP AL,10JC ADADD AL,7AD:ADD AL,30HMOV [BX],ALINC BXSHR DX,1SHR DX,1SHR DX,1SHR DX,1LOOP LBMOV AH,4CHINT 21HCODE ENDSEND START18.把0-100D之间的30个数存入以GRADE为首地址的30个字数组中,GRADE+i表示学号为i+1的学生成绩.另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次.编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中.(提示:一个学生的名次等于成绩高于这个学生的人数加1)DSEG SEGMENTGRADE DW 30 DUP(?)RANK DW 30 DUP(0)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART: PUSH DSSUB AX,AXPUSH AXMOV AX,DSEGMOV DS,AXBEGIN:MOV DI,0MOV CX,30LOOP1:PUSH CXMOV CX,30MOV SI,0MOV AX,GRADE[DI]MOV DX,0LOOP2:CMP GRAD[SI],AXJBE GOONINC DXGOON :ADD SI,2LOOP LOOP2POP CXINC DXMOV RANK[DI],DXADD DI,2LOOP LOOP1RETMAIN ENDPCSEG ENDSEND START19.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数.试编制一程序,把既在A中又在B中出现的整数存放于数组C中。

相关文档
最新文档