汇编语言第五章1_12习题解

合集下载

第5章习题解答

第5章习题解答

第5章汇编语言程序设计习题参考答案1.(1) BUFF DB 240 DUP(?)(2) xx DB “BYTE”,”WORD”2.:0000H,则内存分配如下:V AR1V AR2V AR3V AR4V AR53.(1) 段的类型:段的类型有4种,分别是代码段、数据段、堆栈段和附加段。

(2) 段的定义:定义段使用伪指令SEGMENT/ENDS来定义的。

即:段名SEGMENT [定位类型] [组合类型] […类别‟]……段名ENDS(3) 选项的作用和含义:定位类型:告诉汇编程序如何确定逻辑段的边界在存储器的位置,共有4种。

①BYTE:表示逻辑段从字节的边界开始,即本段的起始地址紧接前一段。

②WORD:表示逻辑段从字的边界开始,即本段的起始地址必须是偶数。

③PARA:表示逻辑段从节的边界开始,即本段的起始地址后4位为0。

④PAGE:表示逻辑段从节的边界开始,即本段的起始地址后8位为0。

组合类型:告诉汇编程序当装入存储器时各个逻辑段如何进行组合,共有6种。

①不组合:如果缺省,则不组合。

② PUBLIC:对于不同逻辑段只要有相同段名就把他们集中成一段装入内存。

③ STACK:同PUBLIC相同,但仅限于堆栈段。

④ COMMON:对于不同逻辑段若有相同的段名,则都从同一地址装入。

⑤ MENORY:表示在几个逻辑段连接时,本段定位在地址最高的地方。

⑥ AT 表达式:表示以表达式的值来定位段地址。

‘类别’:在连接时决定各逻辑段的装入顺序。

4. 假设程序中有4个不同类型的段,则名为initprogram宏指令的宏定义如下:initprogram MACRO csname,dsname,esname,ssnameASSUME CS:csname,DS:dsname,ES:esname,SS:ssnameSTART: MOV AX,dsnameMOV DS,AXMOV AX,esnameMOV ES,AXMOV AX,ssnameMOV SS,AXENDM5.假设需传送的数据块为字节数据块,则名为Datastranaction宏指令的宏定义如下:Datastranaction MACRO buffer1,buffer2,lengthLEA SI,buffer1LEA DI,buffer2MOV CX,lengthCLDREP MOVSBENDM6.有效地指令为:(2)、(5)、(9)无效的指令为:(1) 数据类型不一致(3) 两个操作数不能同时为存储器操作数(4) CS不能作为目的操作数(6) 不能用两个变址寄存器作有效地址分量(7) 一个操作数不能是两个变量名的表达式(8) 基址和变址只能相加不能相减(10) 目的操作数不能是立即数(11) 在有效地址中不能减基址或变址严格地说:(9)也不对,因为没有指出存储器的数据类型,即操作数类型不明确。

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。

程序调试的方法,常见问题的程序设计方法。

一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。

A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。

A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。

A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。

A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。

A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。

A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。

A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。

A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。

A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。

A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。

汇编 第五章基本结构程序设计参考答案.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中。

汇编语言课后答案第5章

汇编语言课后答案第5章

第5章习题5.1 选择题1.条件转移指令能转移的最大范围是(A)A. –128~127B. 0~255C. -32768~32767D. 0~655352.指令JMP BX转移的目标地址的偏移量为(c)A. IP+BX的内容B. IP+[BX]C. BX的内容D. BX所指向的内存字单元的内容3.指令JMP WORD PTR [BX]转移的目标地址偏移量为(D)A. IP+BX的内容B. IP+[BX]C. BX的内容D. BX所指向的内存字单元的内容4.若A、B为无符号数,当A≥B时转移的条件转移指令为(D)A. JGEB. JGC. JAD. JAE5.若A、B为带符号数,当A≤B时转移的条件转移指令为(D)A. JBB. JBEC. JLD. JLE6.下列程序段中,不能转移到标号L1处执行的程序段是(B)A. JMP L1B. MOV BX,L1C. LEA BX,L1D. MOV BX,OFFSET L1 JMP BX JMP BX JMP BX7.下面程序段中,当满足条件,转移到标号L2执行时,BL中的值正确的是( D )CMP BL,2FHJGE L2A. BL=0FFHB. BL=80HC. BL=0D. BL=30H8. 设有下列程序段,若执行后能转移到L3处,则说明AL的内容为( A,D)TEST AL,05HJZ L3A. 0A0HB. 05HC. 第1、3位为0D. 第0、2位为05.2 内存缓冲区BUF1中有10个字节数据,下面的程序段求出这十个数的平均值,并存储于字节变量RESULT中,请将程序补充完整。

MOV AX,0LEA BX,BUF1MOV CX,10LOP1:ADD AX,___[BX]_____INC BX_LOOP LOP1_________MOV DL,10DIV DLMOV RESULT,__AL____HLT5.3 内存缓冲区BUF2中有10个无符号字数据,下面的程序段找出这些数的最大值,并存于MAX字单元。

汇编语言程序设计(第四版)第5章【课后答案】

汇编语言程序设计(第四版)第5章【课后答案】

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第五章高级汇编语言程序设计5.1 条件表达式中逻辑与“&&”表示两者都为真,整个条件才为真,对于程序段:.if (X==5) && (ax!=bx)inc ax.endif请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。

解:cmp X, 5je abcjmp doneabc: cmp ax, bxjne cdejmp donecde: inc axdone:....5.2条件表达式中逻辑与“||”表示两者之一为真,整个条件就为真,对于程序段:.if (X==5) || (ax!=bx)inc ax.endif请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。

解:cmp X, 5je abcjmp donecmp ax, bxjne abcjmp doneabc: inc axdone: ....5.3、对于程序段:.while ax!=10mov [bx],axinc bxinc bxinc ax请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。

5.4、对于程序段:.repeatmov [bx],axinc bxinc bxinc ax请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。

5.5、宏是如何定义、调用和展开的?解:宏定义采用一对伪指令实现,格式如下(其中方括号表示可选):宏名macro [形参表]宏定义体endm宏调用时,利用宏名带上实参即可,格式如下:宏名[实参表]5.6、宏定义中的形式参数有什么特点,它是如何进行形参和实参结合的?解:宏的参数功能非常强大,即可以没有参数,也可以带有一个或多个参数;而且参数的形式非常灵活,可以是常量、变量、存储单元、指令或它们的一部分,还可以是表达式等。

宏展开时的形参与实参结合是用位置匹配的实参对形参进行取代。

实参个数与形参个数不同时,多余的实参没有作用,缺少的实参则用空格代替。

汇编语言 廖建明编 课后习题第五章习题答案

汇编语言 廖建明编 课后习题第五章习题答案

5.1 顺序分支循环5.2 (AX)=5400H (BL)=06H (DX)=2106H5.3 D5.4 C5.5 B5.6 D5.7 C5.8 0FFH 05.9 C5.10 略5.11 B5.12 A5.13 23H 01H 56H 04H 00H5.14 将BUF里的小写字母转换成大写字母5.15 略5.16 (1)完成85274AH与938765H的加法功能(2)不能。

INC对CF无影响,而ADD有影响(3)MOV SI,OFFSET DA TA1(4)置CF为零。

若CF初始为1,则在第一次执行ADC指令时会产生不正确的结果。

5.17(编程题为参考答案,下同)DA TA SEGMENTDA TA1 DB ?DA TA2 DB ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TABEGIN:MOV AX,DA TAMOV DS,AXMOV DX,DA TA1;高位送DXMOV AX,DA TA2;低位送AXSHL AX,1;RCL DX,1;MOV AH,4CHINT 21HCODE ENDSEND BEGIN5.18DA TA SEGMENTDA TAS DB ‘PLEAST INPUT:’,0DH,0AH, ‘$’DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TABEGIN: MOV AX,DA TAMOV DS,AXMOV AH,9HINT 21H ;输出“PLEASE INPUT:”MOV AH,1INT 21H ;用户输入MOV DL,ALSUB DL,20HMOV AH,2INT 21H ;显示输出MOV AH,4CHINT 21HCODE ENDSEND BEGIN5.19DA TA SEGMENTARRAY DB 20 DUP(?);原数列PLUS DB 20 DUP(0);存放正数NEGA DB 20 DUP(0);存放负数PLUS_N DB 0;指示正数个数NEGA_N DB 0;指示负数个数TIME DB 20DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TABEGIN: MOV AX,DA TAMOV DS,AXLEA SI,ARRAYLEA BX,PLUSLEA DI,NEGAMOV CX,TIMECLC;以上为初始化LOOP1: MOV AL,[SI]CMP AL,0INC SIJA DAYUJB XIAOLOOP LOOP1;等于零处理JMP SHOWDAYU: MOV [BX],AL;大于零的处理INC BXINC PLUS_NLOOP LOOP1JMP SHOWXIAOYU:MOV [DI],AL;小于零的处理INC DIINC NEGA_NLOOP LOOP1SHOW: MOV DL,PLUS_N;屏幕显示输出MOV AH,2INT 21HMOV DL,NEGA_NMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND BEGIN5.20STACK SEGMENT PARA STACKDB 10H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKBEGIN: PUSHF;标志位入压入栈POP AX;出栈到AXEXCHANGE AH,AL;高低位互换PUSH AX;AX压入栈POPF;弹出到标志寄存器CODE ENDSEND BEGIN5.21DA TA SEGMENTSTR DB ‘INPUT 1 OR 0’,0DH,0AH,‘$’BUFF DB 20 DUP(0)LEN DW 10DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TABEGIN: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET STRMOV AH,09HINT 21HMOV BH,48;零的ASCII码MOV BL,65;A的ASCII码LEA SI,BUFFMOV CX,LENMOV AH,1HINT 21HCMP DL,1JZ ACMP DL,2JZ BJMP END0;输入非1非2即结束程序A: MOV [SI],BHINC SIMOV [SI],BLINT SIMOV DL,BHMOV AH,2INT 21HMOV DL,BLMOV AH,2INT 21HINC BHINC BLLOOP AJMP END0B: MOV [SI],BLINC SIMOV [SI],BHINC SIMOV DL,BLMOV AH,2INT 21HMOV DL,BHMOV AH,2INT 21 HINC BLINT BHLOOP BEND0: MOV AH,4CHINT 21HCODE ENDSEND BEGIN5.22DA TA SEGMENTX DB ?Y DB ?Z DB ?SUM DB 0DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA BEGIN: MOV AX,DA TAMOV DS,AXMOV AX,XADD AX,YCMP AX,200MOV AX,XJG SUB0;判断ADD AX,ZJMP END0SUB0: SUB AX,ZEND0: MOV SUM AXMOV AH,4CHINT 21HCODE ENDSEND BEGIN5.23略。

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

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

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 单元,其数组元素及结果均为字型数据。 显然数组求和应该用子程序完成,这样做使得代码真正共享。但在子程序中不能直接 引用数组变量名,否则不能做到通用,在这种情况下可以通过传递参数地址的方法实现最 终的参数传递。本例用数组首地址、元素个数的地址、结果地址构成一个地址表,通过寄 存器把表的首地址传递给子程序,子程序通过地址表的参数地址访问到所需参数。

1632位微机原理、汇编语言及接口技术第五章课后习题答案-

1632位微机原理、汇编语言及接口技术第五章课后习题答案-

1632位微机原理、汇编语言及接口技术第五章课后习题答案-习题 5.2在半导体存储器中, RAM 指的是随机存取存储器 ,他可读可写,但断电后信息一般会丢失 ; 而 ROM 指的是只读存储器 , 正常工作时只能从中读取信息, 但断电后信息不会丢失。

以EPROM 芯片 2764为例, 其存储容量为 8K ×8位, 共有 8 条数据线和 13 条地址线。

用它组成 64KB 的 ROM 存储区共需 8 片 2764芯片。

习题 5.7什么是存储器连接中的 “ 位扩充 ” 和 “ 地址扩充 ” ?欲组成 32KB 的 RAM 存储区,在采用容量 1K ×4位的静态 RAM 芯片或容量16K ×1位的静态 RAM 芯片的情况下,各需要多少芯片?在位方向和地址方向上各要进行什么样的扩充?请画出采用2114芯片时的连接示意图。

解答:⏹位扩充——存储器芯片数据位数小于主机数据线数时,利用多个存储器芯片在数据 “ 位 ”方向的扩充;⏹地址扩充 (字扩充——当一个存储器芯片不能满足系统存储容量时,利用多个存储器芯片在 “ 地址 ” 方向的扩充⏹组成 32KB 存储空间,用 SRAM 2114(1K ×4需要 64个芯片;⏹组成 32KB 存储空间,用 DRAM 4116(16K ×1需要 16个芯片;⏹它们都需要进行位扩充和地址扩充习题 5.8⏹存储芯片为什么要设置片选信号?⏹它与系统地址总线有哪些连接方式?⏹采用何种连接方式可避免地址重复?⏹采用哪些连接方式可节省用于译码的硬件?解答:⏹片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间⏹存储器片选信号通常与 CPU 地址总线的高位地址线相关联,可以采用“ 全译码 ” 、 “ 部分译码 ” 、 “ 线选译码 ” 方式⏹采用全译码方式可以避免地址重复⏹采用部分或线选译码可以节省译码硬件习题 5.9:在一个针对存储器的译码系统中,如果有4个地址线未参与译码,那么每个存储单元会同时拥有几个地址?解答:24=16习题 5.10请写出图 5.33中 4个存储芯片各自的可用地址范围,并指明其重复地址解答 1解答 2习题 5.11用 6264芯片(容量 8K ×8位的 SRAM ,采用全译码方式,在 8088系统的内存区段40000H ~43FFFH 扩充 RAM 区。

汇编语言第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域的实际长度。

汇编语言课程课件-第五章

汇编语言课程课件-第五章

MOV reg/mem,imm
例题5-1
MOV reg/me;m/立se即g,数re送g寄存器例或题主5-存2
MOV;r寄eg存/s器eg送,m(em段)寄存器例或题主5存-3
MOV reg/mem;,s主eg存送(段)例寄题存5器-5 ;段寄存器送寄存器或主存
交换指令XCHG(exchange)
; 字节数组访问 mov al,arrayB mov al,[arrayB+1] mov al,[arrayB+2] ; 字数组访问 mov ax,arrayW mov ax,[arrayW+2]
; AL = 10h ; AL = 20h ; AL = 30h
; AX = 100h ; AX = 200h
在保护模式下,LDS指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
寄存器。
实模式下,LES指令将主 存 中 mem 指 定 的 字 送 至 r16,并将mem的下一字 送DS寄存器。
在保护模式下,LES指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
5.2.1 加法指令
执行双字,字或字节的加法运算。
ADD ADC INC
加法指令ADD
ADD指令将源与目的操作数相加,结 果送到目的操作数 ADD指令按状态标志的定义相应设置
例题5-12
ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem
ADD mem,imm/reg ;mem←mem+imm/reg
把两个地方的数据进行互换
XCHG reg,reg/mem ;reg reg/mem

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

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

汇编语言各章习题答案习题一答案: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位数。

第5章汇编语言层习题参考解答-汇编语言与计算机组成原理 答案

第5章汇编语言层习题参考解答-汇编语言与计算机组成原理 答案
.MODEL SMALL .DATA SCORE BYTE 0,45,50,60,…100 MEAN BYTE ? S100 BYTE 0 S90 BYTE 0 S80 BYTE 0 S70 BYTE 0 S60 BYTE 0 S59 BYTE 0
.STACK 100H .CODE START: MOV AX, @DATA
MOV DS, AX XOR AH,AH MOV AL,SCORE SUB AL,60 MOV BL,10
L1: L2: L3: L4: L5: NEXT:
DIV BL MOV BL,AL XOR BH,BH SHL BX,1 JMP J_TAB[BX] MOV DX,OFFSET B MOV AH,9 INT 21H JMP NEXT MOV DX,OFFSET BPL MOV AH,9 INT 21H JMP NEXT MOV DX,OFFSET AM MOV AH,9 INT 21H JMP NEXT MOV DX,OFFSET A MOV AH,9 INT 21H JMP NEXT MOV DX,OFFSET AP MOV AH,9 INT 21H JMP NEXT MOV AH, 4CH INT 21H END START
.MODEL SMALL .DATA SCORE BYTE 60 AP BYTE 'A+','$' A BYTE 'A','$' AM BYTE 'A-','$' BPL BYTE 'B+','$' B BYTE 'B','$' J_TAB WORD L1,L2,L3,L4,L5 .CODE START: MOV AX, @DATA

16/32位微机原理、汇编语言及接口技术第2版-第五章-习题答案

16/32位微机原理、汇编语言及接口技术第2版-第五章-习题答案

P151第五章部分习题参考答案
5.2 答:随机存取存储器丢失只读存储器读取不丢失8 13 8
5.4 答:应该有12个地址引脚和4个数据引脚。

需安排的控制引脚有:片选CS,读控制OE,写控制WE。

5.5 答:位片结构结构是每片有1位数据线;字片结构是每片有多位数据线。

2114是字片结构,4116是位片结构。

5.7 答:用多个芯片来扩充存储数据的位宽度,这种扩充称为位扩充。

用多个芯片在地址方向上进行扩充,这种扩充称为字扩充。

用2114(1K*4)组成32KB需64片,用4116(16K*1)组成32KB需16片。

5.9 答:每个存储单元会同时拥有16个地址。

5.10 答:
5.11 答:
5.12 答:
5.13 答:2764 8K*8 EPROM 片内A 12—A 0 32KB 空间 使用4片,因为存储空间在8088系统地址最高端的32KB ,所以地址范围为 F8000H —FFFFFH
+5V
D 7-D 0
A 19
A 16A 17A 18。

(完整版)汇编语言习题详解(全部)(免费)

(完整版)汇编语言习题详解(全部)(免费)

《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

汇编语言课后习题及答案 按章节 超全面

汇编语言课后习题及答案 按章节 超全面

`00第一章课外练习题一、单项选择题:1.从键盘输入的字符,在计算机内存储的是它的(A)(A)二进制编码(B)四进制编码(C)八进制编码(D)十六进制编码2.6位无符号二进制数能表示的最大十进制数是(B)。

(A)64 (B)63 (C)32 (D)31 3.十进制数269变换为十六进制数是(C)。

(A)10B (B)10C (C)10D (D)10E 4.8位的微型计算机系统是以16位来表示地址,则该微机系统有(C)个地址空间。

(A)255 (B)65535 (C)65536 (D)1048576 5.8位有符号二进制数能表示的最大十进制数是(D)。

(A)256 (B)255 (C)128 (D)127 6.十六进制数88H,可表示成下面几种形式,请找出错误的表示(D)。

(A)无符号十进制数136 (B)带符号十进制数-120(C)压缩型BCD十进制数88 (D)8位二进制数-8的补码表示7.有一个数值152,它与十六进制数6A相等,那么该数值是(B)。

(A)二进制数(B)八进制数(C)十进制数(D)四进制数8.7位ASCII总共可表示(C)个符号。

(A)256 (B)127 (C)128 (D)255 9.4B的字长是(C)。

(A)8位(B)16位(C)32位(D)64位二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.字节通常用英文单词“Bit”来表示(×)。

2.目前广泛使用的Pentium计算机其字长为5个字节(×)。

3.存储器中将8个相邻的二进制位作为一个单位,这种单位称为字节(√)。

4.微型计算机的字长并不一定是字节的整数倍(×)。

三、填空题1.8位有/无符号整数的表示范围写成16进制形式为(80~~7F)/(00~~FF)。

2.己知:计算机中有一个“01100001”编码,如果把它看作是无符号数,它是十进制什么数(97);如果认为它是BCD,则表示(01100001)BCD;认为它是某个ASCII,则代表(a)字符。

最新汇编语言程序设计(第四版)第5章【课后答案】

最新汇编语言程序设计(第四版)第5章【课后答案】
ifnb
mov dx,calladdress
endif int 21h
ENDM
5.22; 1.编写主程序,并进行汇编产生OBJ模块;
2.编写独立的子程序,也进行汇编产生OBJ模块;
3.分别编写主程序与子程序时,需要处理好共用变量、过程、逻辑段属性、参 数传递等问题;
4.利用连接程序将主程序模块和子程序模块连接起来,形成完整的可执行程序5.28;;数据段table dw 2277,2138,1808,1709,1522,1356,1208,1139
movstr strN,dstr,sstr
lea si, sstr
lea di, dstr
mov cx, strN
1 pop ax
5.15; wtemp =2 repeat 100 dw 0
dw wtemp wtemp =wtemp+2
endm
5.18; DOS21H MACRO callnum,calladdress mov ah,callnum
5.7、宏结构和子程序在应用中有什么不同,如何选择采用何种结构?
解:宏汇编的特点是在汇编阶段进行语句展开,无需返回,不减少目标程序代 码,执行速度没有改变;通过形参、实参结合传递参数。宏汇编适合于程序段 较短或要求执行速度快的场合。
子程序在执行阶段需要由主程序执行调用指令CALL进行调用,进而转入子
mov [bx],ax
inc bx
inc bx
inc ax
■until ax=10
请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。
5.5、宏是如何定义、调用和展开的?
解:
宏定义采用一对伪指令实现,格式如下(其中方括号表示可选):

汇编语言第五章答案

汇编语言第五章答案

5.1试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

答:程序段如下:BEGIN:MOV AH,1;从键盘输入一个字符的DOS调用INT21HCMP AL,‘a’;输入字符<‘a’吗?JB STOPCMP AL,‘z’;输入字符>‘z’吗?JA STOPSUB AL,20H;转换为大写字母,用AND AL,11011111B也可MOV DL,AL;显示一个字符的DOS调用MOV AH,2INT21HJMP BEGINSTOP:RET5.2编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

答:程序段如下:BEGIN:MOV AH,1;从键盘输入一个字符的DOS调用INT21HCMP AL,‘a’;输入字符<‘a’吗?JB STOPCMP AL,‘z’;输入字符>‘z’吗?JA STOPDEC AL;得到前导字符MOV DL,AL;准备显示三个字符MOV CX,3DISPLAY:MOV AH,2;显示一个字符的DOS调用INT21HINC DLLOOP DISPLAYSTOP:RET5.3将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL 和DL中。

答:程序段如下:DSEG SEGMENTSTORE DB4DUP(?)DSEG ENDS┇BEGIN:MOV CL,4;右移四次MOV CH,4;循环四次LEA BX,STOREA10:MOV DX,AXAND DX,0FH;取AX的低四位MOV[BX],DL;低四位存入STORE中INC BXSHR AX,CL;右移四次DEC CHJNZ A10;循环四次完了码?B10:MOV DL,STORE;四组数分别放在AL、BL、CL和DL中MOV CL,STORE+1MOV BL,STORE+2MOV AL,STORE+3STOP:RET5.4试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。

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

《IBM-PC汇编语言程序设计第二版》部分习题答案(第5章)清华大学出版社,沈美明、温冬婵编著。

5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

.model small.stack 100H.codemain proc farStart:push dxpush axmov ax ,0input:mov ah,01H’int 21Hcmp al,61Hjl lop1cmp al,7AHjg lop1sub al,20Hmov dl,almov ah,02Hint 21Hmov dl,20hmov ah,02hint 21hjmp inputlop1:retendpEnd start5.2 编写一个程序,从键盘接受一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

.model small.386.codeMAIN PROC FARstart:push dspush axsub ax,axinput:mov ah,07Hint 21Hcmpe:cmp al,20HJE exitcmp al,61HJL inputcmp al,7AHJG inputprint:sub al,01Hmov dl,almov ah,02Hint 21Hadd al,01Hmov dl,almov ah,02Hint 21Hadd al,01Hmov dl,almov ah,02Hint 21Hmov dl,0DH ;输出回车 mov ah,02Hint 21Hmov dl,0AH ;输出换行 mov ah,02Hint 21Hjmp inputexit :retMAIN ENDPEND start5.3 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL、DL中。

.model small.datax DB 4 dup(?).stack 100H.codeMAIN PROC FARstart:push dspush axpush bxpush cxpush dxmov ax,0hmov ax,@datamov ds,axmov ax,1234Hmov cx,04Hmov si,00Hlop:push cxmov cl,04Hrol ax,clpush axand al,0FHmov x[si],alpop axpop cxadd si,1Loop lopMOV SI,01Hmov al,X[SI]INC SImov bl,X[SI]INC SImov cl,X[SI]mov dl,[X]print:ADD AL,30HADD BL,30HADD CL,30HADD DL,30Hmov ah,02Hint 21Hmov dl,almov ah,02Hint 21Hmov dl,blmov ah,02Hint 21Hmov dl,clmov ah,02Hint 21Hpop dxpop cxpop bxexit:retMAIN ENDPEND start5.4 编写一个程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示"MATCH",若不同则显示:"NO MATCH"。

.model small.dataSTRING1 DB 'I must study hard'Max1 dw $-string1STRING2 DB 'I must study hard'Max2 dw $-string2X DB 'MATCH$'Y DB 'NO MATCH$'.stack 100H.codemain proc farStart:push dxpush axmov ax,0mov ax,@datamov ds,axmov es,axmov ax,max1cmp ax,max2jne nomatchlea si,STRING1lea di,STRING2mov cx,max1cldrepe cmpsbcmp cx,00Hje matchnomatch:lea dx,ymov ah,09Hint 21Hjmp exitmatch:lea dx,xmov ah,09Hint 21Hexit:retEnd start5.5编写一个程序,要求能从键盘接收一个个位数N,然后响铃N次,(响铃的ASCII为07)。

.model small.codemain proc farstart:push dspush axsub ax,axinput:mov ah,01Hint 21Hcmp al,20Hje exitcmp al,30Hjle inputcmp al,3AHjge inputsub al,30Hmov cx,axand cx,0FFHlop:mov dl,07Hmov ah,02Hint 21Hloop lopjmp inputexit :retmain endpend start5.6编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,并分别把这两个数组中的数据个数显示出来。

.model small.386.dataM DB 1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10P DB 20 dup(?)N DB 20 dup(?).stack 100H.codeMAIN PROC FARstart:PUSH axAND ax,0MOV ax,@datamov ds,axMOV bx,0MOV si,0MOV di,0MOV cx,20Dcmpe :CMP M[bx],0JL ifLow ;小于0 hight :MOV al, M[bx]MOV P[si],alinc siJMP commonContrl ifLow :MOV al, M[bx]MOV N[di],alINC di commonContrl:INC bxloop cmpemov cx,simov si,0nunp:mov al,P[si]call showNumberinc siloop nunpcall printCRmov cx,dimov di,0nunn:mov al,N[di]call showNumberinc diexit: retMAIN ENDPshowNumber PROC NEARcovernum:push axpush bxpush cxpush dxand ax,0ffHcmp al,0jnl positiveneg almov dl,2DHmov ah,02Hint 21Hmov ah,0positive:cbwaamsub cl,clmov bl,almov al,ahcbwaammov cl,almov dl,ahadd dl,30hmov ah,2Hint 21hmov dl,cladd dl,30hint 21hmov dl,bladd dl,30hint 21hmov dl,2cHint 21Hmov dl,20Hint 21Hpop dxpop cxpop bxpop axretshowNumber ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;printCR PROC NEARmov dl,0aHmov ah,02Hint 21Hmov dl,0dHmov ah,02Hint 21HretprintCR ENDPend start5.7编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它放在AX中。

此题根据题意要求应该使用完整汇编格式,因为精简格式也使用DATA....dataare segmentDATA DW 3322H,4555H,200H,3544H,1245Hnum DB ($-DATA)/2dataare endscode segmentassume cs:code,ds:dataareMAIN PROC FARstart:push dspush axmov ax,0Hmov ax,dataaremov ds,axmov dx,0H ;偶数数量计数mov cx,nummov si,0HisO:mov bx,DATA[si]shr bx,1Hjnc addDXjmp commonControladdDX:ADD dx,1Hcmp dx,1Hje firstAXValuecompare:mov bx,DATA[si]cmp bx,axjge commonControlmov ax,bxcommonControl:ADD si,2Hloop isOjmp exitfirstAXvalue:mov ax,DATA[si]jmp compareexit:retMAIN ENDPCODE ENDSEND START5.9编写一个汇编语言程序,要求从键盘上接收一个四位的十六位进制数,并在终端上显示与它等值的二进制数。

.MODEL SMALL.386.STACK100H.CODEMAIN proc farstart:push dspush axmov ax,0mov cx,4input:mov ah,01H int 21Hcmp al,30H jl inputcmp al,39H jle scmp al,41Hjl inputcmp al,46Hjle sub1cmp al,61H jl inputcmp al,66H jle sub2jmp inputsub1:sub al,07H jmp ssub2:sub al,27H s:sub al,30Hadd dl,alcmp cx,1Hje fPUSH CXMOV CL,04H rol dx,CL POP CXf:loop input exit:call printretmain endp print proc nearp:rol dx,01Hpush dxand dL,01Hadd dL,30Hmov ah,02Hint 21HMOV DL,0DHINT 21Hpop dxloop pretprint endpend start5.10设有一段英文,其变量字符名为ENG,并以$字符结束。

试编写一程序,查对单词SUN在该文中的出现次数,并以格式"SUN XXXX"显示出次数。

.model small.386.dataENG db 'SUN's SUN JAVA',24H ;24H = $MESSAGE db 'SUN:','$'.stack 100H.codeMAIN PROC FARstart:PUSH DSPUSH AXAND AX,0MOV AX,@dataMOV DS,AXMOV AX,0HMOV SI,01HsubSI1:SUB SI,01HsubSI2:SUB SI,01HcompareS:MOV DL,ENG[SI]CMP DL,24HJE printCMP DL,53H ;S的ASCII码JNE compareScompareU:ADD SI,01HMOV DL,ENG[SI]CMP DL,55H ;U的ASCII码JNE subSI2compareN:ADD SI,01HMOV DL,ENG[SI]CMP DL,4EH ; N的ASCII码JNE subSI1INC AXJMP compareSprint:LEA DX,MESSAGEPUSH AXMOV AH,09HINT 21HPOP AXcall showNumberexit:retMAIN ENDP;;;;;;;;;;;;;;;;;注意,ShowNumber这个子过程仅能显示al中99以内的数;;;;;;;;;;;;;;;;showNumber PROC NEARcovernum:DAAMOV dx,axmov bl,02Hshow:MOV cl,04HROL dl,clpush dxADD dl,30HMOV ah,02Hint 21Hpop dxdec bljnz showretshowNumber ENDPEND start5.11从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。

相关文档
最新文档