第4章汇编语言程序设计_第1页
第4章汇编语言程序设计_第2页
第4章汇编语言程序设计_第3页
免费预览已结束,剩余29页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、习题 41. 什么是“三种基本结构”?解释“基本”两个字在其中的含义。 答:三种基本结构指:顺序结构,选择结构、循环结构。使用这 3 种结构,可以编制出任何所需要的程序,因此冠以“基本”结构。2. 什么叫做 “控制转移指令” ?它和数据传送、 运算指令有什么区别?它是怎样实现它的 功能的?答:控制转移指令是可以改变指令执行顺序的指令。数据传送、运算指令总是顺序执行的, 而控制转移指令通过改变 IP 和/或 CS 寄存器的值,改变了程序指令的执行顺序。3. 指令“ JMP DI”和“ JMP WORD PTR DI ”作用有什么不同?请说明。答:上述两条指令都是段内近转移指令,但是偏移地址的来源

2、不同。指令“JMP DI ” 执行时,新的偏移地址在 DI 寄存器内, “ JMP WORD PTR DI ”时,目的偏移地址在 存储单元中,该存储单元的地址在 DS: DI 中。4. 已知(AX) = 836BH, X分别取下列值,执行“ CMPAX, X”后,标志位 ZF、CF、OF SF 各是什么?( 1)X=3000H( 2)X=8000H( 3)X=7FFFFH( 4)X=0FFFFH( 5)X=0答:上述指令执行后,标志位ZF、CF 、OF 、 SF 的状态分别是:( 1) ZCOS=0010( 2) ZCOS=0000( 3) ZCOS=0010( 4) ZCOS=0101( 5

3、) ZCOS=00015. 已知(AX) = 836BH,X分别取下列值,执行“ TEST AX, X”后,标志位ZF、CF、OF SF各是什么?( 1) X=0001H( 2) X=8000H( 3) X=0007H( 4) X=0FFFFH ( 5) X=0答:上述指令执行后,标志位 ZF、 CF、 OF、 SF 的状态分别是:( 1) ZCOS=0000( 2) ZCOS=0001( 3) ZCOS=0000( 4) ZCOS=0001( 5) ZCOS=10006. 测试名为X的一个字节,如果 X的第1,3位均为1,转移到L1,如果只有一位为1, 转移到L2,如果两位全为 0,转移到L

4、3。写出对应的指令序列。答: MOV AL, XAND AL, 0000 1010BJZL3CMPAL, 0000 1010BJEL1JMPL27. 假设X和X+2字单元存放有双精度数 P,Y和Y+2字单元存放有双精度数 Q,下面程序 完成了什么工作?MOV DX, X+2MOV AX, X;双精度数P送入DX, AXL1:L2:ADD AX, XADC DX, X+2CMP DX, Y+2JLL2JGL1CMP AX, YJBE L2MOV Z, 1;计算 2*P 送入 DX, AX;2P与Q的高位比较;2P<Q 转 L2 (Z=2);2P>Q 转 L1 (Z=1);如果高位相等

5、,则比较低位;2P的低位小于等于 Q的低位,转L2 (Z=2)JMP SHORT EXITMOV Z, 2EXIT:8.编写指令序列,将AX和BX中较大的绝对值存入 AX较小的绝对值存入答:ANDAX, AXJGESKIP1NEGAXSKIP1: ANDBX, BXJGESKIP2NEGBXSKIP2: CMPAX, BXJGESKIP3XCHGAX, BXSKIP3:答:程序根据 2P 与 Q 的大小,确定 Z 的值。如果2PW Q,则Z=2如果 2P>Q, 则 Z=1请参阅程序注解BX。9.编写指令序列,比较 AX BX中的数的绝对值,绝对值较大的数存入 数存入 BX。AX绝对值较小

6、的答:PUSHAXPUSHBXANDAX, AXJGESKIP1NEGAXSKIP1:ANDBX, BXJGESKIP2NEGBXSKIP2:CMPAX, BXPOPBXPOPAXJGESKIP3XCHGAX, BXSKIP3:10. 编写指令序列,如果 AL寄存器存放的是小写字母,把它转换成大写字母,否则不改变 AL内容。答: CMP AL, a'JBDONECMPAL, z'JADONEsubal, a-A'DONE:"X -3X c-211. 计算分段函数:Y =5X +6_2兰X兰32X 3X的值从键盘输入,Y的值送显示器输出。答:INCLUDE YL

7、IB.HDATA SEGEMNTMESS1 DB 0DH, 0AH, Input value of X please : $ 'MESS2 DB 0DH, 0AH, Y= : $ 'DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART:MOVAX, DA TAMOVDS, AXLEADX, MESS1CALLREADINT;输入X的值CMPAX, -2JGEL2L1:SUBAX, 3;AX X-3JMPDONEL2:CMPAX, 3JGL3MOVBX, AXADDAX, AX;AX 2XADDAX, AX;AX 4XADDAX

8、, BX;AX 5XADDAX, 6;AX 5X+6JMPDONEL3:MOVAX, 2;AX 2DONE:LEADX, MESS2CALLWRITEINT;输出Y的值CALL CRLFMOV AX, 4C00HINT 21HCODE ENDSEND STARTA+B(AvO)m(BcO)12.计算分段函数:丫= 2 (A=0) (B=0)A -B (A .0) (B 0)A, B的值从键盘输入,Y的值送显示器输出(人表示“并且”,V表示“或者”)。答:INCLUDEYLIB.HDATASEGEMNTMESS1DB0DH, 0AH,Input the value of A please :$&

9、#39;MESS2DB0DH, 0AH,Input the value of B please :$ 'MESS3DB0DH, 0AH,Y= : $ 'ADW?BDW?DATAENDSCODESEGMENTASSUMECS: CODE, DS:DA TASTART:MOVAX, DA TAMOVDS, AXLEADX, MESS1CALLREADINT;输入AMOVA, AXLEADX, MESS2CALLREADINT;输入BMOVB, AXANDAX, AXJLL1;B<0,转 L1CMPA, 0JLL1;A<0,转 L1JNZSKIP1CMPB, 0JZL2;

10、A=0 && B=0,转 L2JMPEXIT;A=0 && B工0,无定义,转EXITSKIP1:CMPB, 0JLEEXIT;A工0 && B=0,无定义,转EXITL3:MOVAX, ASUBAX, BJMPDISPL2:MOVAX, 2JMPDISPL1:MOVAX, AADDAX, BDISP:LEADX, MESS2CALLWRITEINT ;输出 Y 的值CALLCRLFEXIT:MOVAX, 4C00HINT21HCODEENDS说明:如果把ENDSTARTA, B 的正轴上无A 、 B 看作是平面直角坐标的两根轴,那么这个函数在定

11、义。无法计算,也无法输出结果。13.编写程序,求10元素字数组LIST中绝对值最小的数,存入 MIN单元。 答: DATA SEGEMNTLISTDW-56, +12, 88, -126, -5, 16, 32, -99, 72, -18MINDW?MINABS DW ?DATA ENDSCODE SEGMENTASSUMECS: CODE, DS:DA TASTART:MOVAX, DA TAMOVDS, AXMOVAX, LISTMOVMIN, AX;将数组第一个元素假设为绝对值最小的数MOVMINABS, 32767;最小的绝对值假设为 32767LEASI, LISTMOVCX, 10

12、AGAIN: MOVAX, SICMPAX, 0JGESKIP1NEGAX;求绝对值SKIP1: CMPAX, MINABS;绝对值与假设的最小绝对值比较JGESKIP2;假设的绝对值较小,跳过MOVMINABS, AX;保存新的最小绝对值MOVAX, SI;取出新的绝对值最小的数MOVMIN, AX;保留新的绝对值最小的数SKIP2: ADDSI, 2LOOPAGAINMOVAX, 4C00HINT21HCODE ENDSEND START 说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来 自 LIST 数组。14.编写程序,求20元素无符号字数组 ARRAYS最小

13、的奇数,存入 ODD单元,如果不存在 奇数,将ODD单元清零。答: DATA SEGEMNTARRAY DW 56, 12, 88, 126, 5, 16, 32, 99, 72, 18DW 116, 34, 92, 32, 156, 42, 816, 16, 15, 218ODD DW ?DATA ENDSCODE SEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DA TAMOVDS, AXMOVBX, 0MOVODD, 65535;将 65535 假设为最小的奇数LEASI, ARRAYMOVCX, 20AGAIN:MOVAX, SITESTAX,

14、1;测试是否为奇数JZSKIP;不是奇数跳过INCBX;记录奇数个数CMPAX, ODD;奇数与预设的最小奇数比较JGESKIP;大于预设奇数,跳过MOVODD, AX;小于预设奇数,保留SKIP:ADDSI, 2LOOPAGAINCMPBX, 0;判有无出现过奇数JNZDONEMOVODD, 0;未出现过,把 ODD 单元清零DONE:MOVAX, 4C00HINT21HCODEENDSENDSTART15.一个有符号字数组以0 为结束标志,求这个数组的:最大值、最小值、平均值。答:DATASEGEMNTLISTDW-56, +12, 88, -126, -5, 16, 32, -99, 7

15、2, -18, 0MINDW?MAXDW?AVGDW?DATAENDSCODE SEGMENTASSUME CS: CODE, DS: DA TA START:MOVAX, DA TAMOVDS, AXMOVMIN, 32767;将 32767 假设为最小的数MOVMAX, -32768;将-32768假设为最大的数MOVAVG, 0;AVG 用作累加器,清零LEASI, LISTMOVCX, 0AGAIN:MOVAX, SICMPAX, 0JZDONE;找到零元素,转 DONE 结束处理INCCX;纪录非零元素个数ADDAVG, AX;累加CMPAX, MINJGESKIP1MOVMIN.

16、AX;比预设最小值还小,保留SKIP1:CMPAX, MAXJLESKIP2MOVMAX, AX;比预设最大值还大,保留SKIP2:ADDSI, 2JMPAGAINDONE:JCXZNULL;元素个数为零,转 NULL 处理MOVAX, AVGCWDIDIVCXMOVAVG, AX;计算平均值JMPEXITNULL:MOVMIN, 0;元素个数为 0 ,将“最大值” 、“最小值”MOVMAX, 0;“平均值”清零MOVAVG, 0EXIT:MOVAX, 4C00HINT21HCODEENDSENDSTART16. 数组SCORER存有一个班级 40名学生的英语课程成绩。 按照059,6074,

17、7584 ,5100 统计各分数段人数,存入 N0,N1, N2, N3 变量内。答: DATA SEGEMNTSCORE DW40 DUP(?) ;运行前置入具体数据N0DW?N1DW?N2DW?N3DW?DATAENDSCODESEGMENTASSUMECS: CODE, DS:DA TASTART:MOVAX, DA TAMOVDS, AXMOVN0, 0;各计数器清零MOVN1, 0MOVN2, 0MOVN3, 0LEASI, SCOREMOVCX, 40AGAIN:MOVAX, SICMPAX, 59;分段测试JAL1L0:INCN0JMPNEXTL1:CMPAX, 74JAL2IN

18、CN1JMPNEXTL2:CMPAX, 84JAL3INCN2JMPNEXTL3:CMPAX, 100JANEXTINCN3NEXT:ADDSI, 2LOOPAGAINEXIT:MOVAX, 4C00HINT21HCODEENDSENDSTARTSTRING17. STRING是一个16个字符组成的字符串,RULE是一个字整数。编写程序,测试中的每一个字符,如果该字符为数字字符,把RULE中对应位置1,否则置0。答: DATA SEGEMNTSTRINGDB16 DUP(?);运行前置入具体字符RULEDW?DATA ENDSCODE SEGMENTASSUMECS: CODE, DS: DA

19、 TASTART:MOVAX, DA TAMOVDS, AXMOVRULE, 0;RULE 置为初始状态LEASI, STRINGMOVCX, 16AGAIN:SHLRULE, 1;右侧空出一位MOVAL, SICMPAL, 0';测试是否数字JBNEXTCMPAL, 9'JANEXTORRULE, 1;将 RULE 对应位置 1NEXT:INCSILOOPAGAINEXIT:MOVAX, 4C00HINT21HCODEENDSENDSTART18. 编写程序,从键盘上输入一个无符号字整数,用“四进制”格式输出它的值(也就是, 每 2 位二进制看作一位四进制数,使用数字03)。

20、答: INCLUDE YLIB.HDATA SEGEMNTMESS1DB0DH, 0AH, Input a number please : $ 'MESS2DB0DH, 0AH, The number in quardri_system is: $ 'DATA ENDS CODE SEGMENTASSUMECS: CODE, DS: DA TASTART:MOVAX, DA TAMOVDS, AXLEADX, MESS1CALLREADDEC;输入一个无符号整数MOVBX, AX;转存到 BXLEADX, MESS2MOVAH, 9INT21H;输出前导信息MOVCX, 8ON

21、E: ROLBX, 1ROLBX, 1;最高 2 位移到最低位MOVDL, BL;转存到 DLANDDL, 0000 0011B;保留最低 2 位ORDL, 30H;转换成 ASCII 代码;输出MOV AH, 2 INT 21H LOOP ONE CALL CRLFMOV AX, 4C00HINT 21H CODE ENDSEND START19.编写程序,把一个 30个元素的有符号字数组 ARRAY按照各元素的正负分别送入数组P和M,正数和零元素送 P数组,负数送 M数组。答:DATASEGEMNTARRAYDW30 DUP(?);汇编之前置入数据PDW30 DUP(?)MDW30 DUP

22、(?)DATAENDSCODESEGMENTASSUMECS: CODE, DS: DA TASTART:MOVAX, DA TAMOVDS, AXLEABX, ARRAY; ARRAY 数组指针MOVSI, 0; P 数组指针MOVDI, 0; M 数组指针MOVCX, 30ONE:MOVAX, BX;从 ARRAY 数组取出一个数据ANDAX, ALJGEPLUS;正数、零转 PLUSMINUS:MOVMDI, AX;负数存入 M 数组ADDDI, 2JMPNEXTPLUS:MOVPSI, AX;正数、零存入 P 数组ADDSI, 2NEXT:ADDBX, 2LOOPONEMOVAX, 4

23、C00HINT21HCODEENDSENDSTART20.缓冲区BUFFER中存放有字符串,以 0为结束标志。编写程序,把字符串中的大写字母 转换成小写字母。答: DATA SEGEMNTBUFFER DBA String for Test. ',0DATA ENDSCODE SEGMENTASSUMECS: CODE, DS: DA TASTART:MOVAX, DA TAMOVDS, AXLEABX, BUFFER; BUFFER 缓冲区指针ONE:MOVAL, BX;从缓冲区取出一个字符ANDAL, ALJZQUIT;为零,处理完成CMPAL, A'JBNEXTCMPAL

24、, Z'JANEXTADDAL, a'-A'MOVBX, ALNEXT:INCBXJMPONEQUIT:MOVAX, 4C00HINT21HCODEENDSENDSTART21. 编写程序,从键盘上输入无符号字整数显示运算结果和运算后对应标志位的状态。X, Y的值,进行X+Y的运算,然后按以下格式SUM=XXXXZF=Y, OF=Y , SF=Y, CF=Y(其中 X 为十进制数字, Y 为 0或 1) 答: INCLUDE YLIB.HCODE SEGMENTASSUMECS: CODEMESS1DB0DH, 0AH,Input a unsigned integer

25、please : $ 'MESS2DB0DH, 0AH,SUM=$ 'MESS3DB0DH, 0AH,ZF='ZFDB?DB(JOF='OFDB?DB(JSF='SFDB?DB(JCF='CFDB?DB0DH, 0AH,$'START:PUSH CSPOPDSLEADX, MESS1CALLREADDECMOVCX, AX;输入 XLEADX, MESS1CALLREADDEC;输入 YADDAX, CX;求和PUSHF;保留标志位状态LEADX, MESS2CALLWRITEDEC;输出两个数的和POPBX;标志寄存器内容转存入 BXM

26、OVAL, 0'TESTBX, 100 0000B;测试 ZFJZSKP1INCALSKIP1:MOVZF, ALMOVAL, 0'TESTBX, 1000 0000 0000B;测试 OFJZSKP2INCALSKIP2:MOVOF, ALMOVAL, 0'TESTBX, 1000 0000B;测试 SFJZSKP3INCALSKIP3:MOVSF, ALMOVAL, 0'TESTBX, 1;测试 CFJZSKP4INCALSKIP4:MOVCF, ALLEADX, MESS3MOVAH, 9INT21H;输出标志位状态MOVAX, 4C00HINT21HCO

27、DEENDSENDSTART22. 编写程序,从键盘上输入一个字符串,统计其中数字字符,小写字母,大写字母,空格 的个数并显示。答:INCLUDE YLIB.HCODE SEGMENTASSUME CS: CODEMESS1 DB BUFFER DBMESS2 DBMESS3 DBMESS4 DBMESS5 DBSTART:PUSH0DH, 0AH, Input a string please : $ ' 81, ?, 81 DUP(?)0DH, 0AH, Digits: $ '0DH, 0AH, Uppercase alphabet: $'0DH, 0AH, Lowe

28、rcase alphabet: $ '0DH, 0AH, Space : $'POPDSLEADX, MESS1MOVAH, 09HINT21H;输出提示信息LEADX, BUFFERMOVAH, 0AHINT21H;输入字符串XORDX, DX;各计数器清零XORBX, BXMOVCL, BUFFER+1MOVCH, 0;字符个数送 CXLEASI, BUFFER+2;设置字符指针ONE:MOVAL, SI;取出一个字符CMPAL, JNEL2L1:INCDL;空格字符计数JMPNEXTL2:CMPAL, 0'JBNEXTCMPAL, 9'JAL4L3:INC

29、DH;数字字符计数JMPNEXTL4:CMPAL, A'JBNEXTCMPAL, Z'JAL6L5:INCBH;大写字符计数JMPNEXTL6:CMPAL, a'JBNEXTCMPAL, z'JANEXTINCBL;小写字母计数NEXT:INCSICS23. 答:LOOPONE;循环控制PUSHDXMOVAL, DHLEADX, MESS2MOVAH, 0CALLWRITEDEC;输出数字字符个数LEADX, MESS4MOVAL, BLMOVAH, 0CALLWRITEDEC;输出小写字母个数LEADX, MESS3MOVAL, BHMOVAH, 0CALLW

30、RITEDEC;输出大写字母个数POPDXMOVAL, DLMOVAH, 0LEADX, MESS5CALLWRITEDEC;输出空格个数MOVAX, 4C00HINT21HCODE ENDSENDSTART编写程序,读入 20 个数据,统计每个相同数据出现的次数。DATASEGEMNTNUMBERDW20 DUP(?)TIMESDW20 DUP(?)MESSDB0DH, 0AH, Input a number ofDATAENDSCODESEGMENTINCLUDE YLIB.HNO. $ 'ASSUME CS: CODE, DS: DA TASTART:MOV AX, DA TAM

31、OV DS, AXLEAMOVMOV INPUT: LEAMOVCALLMOVSI, NUMBERCX, 20BX, 1DX, MESSAX, BX WRITEDECDX, -1;输出提示信息和序号CALL MOV INC ADD LOOPREADDEC SI, AL BXSI, 2INPUT;输入一项数据;保存成绩LEABX, TIMESMOVCX, 20INIT:MOVBYTE PTRBX, -1;将“出现次数”初始值设为 -1ADDBX, 2LOOPINITMOVDI, 0;DI 为被统计数据指针MOVCX, 20STAT0:PUSHCXMOVCX, 20MOVSI, 0;SI 为其它数

32、据的指针MOVAL, NUMBERDI;取出被统计数据STAT1:CMPAL, NUMBERSI;与其他数据相比较JNESKIPINCTIMESDI;出现相同数据,次数加 1SKIP:ADDSI, 2LOOPSTAT1;比较下一个数据POPCXADDDI, 2LOOPSTAT0MOVAX, 4C00HINT21HCODEENDSENDSTART24. 编写程序,打印九九乘法表。 答: INCLUDE YLIB.HCODE SEGMENTASSUMECS: CODESPACEDB$';乘积不足两位时补一个空格START:CALLCRLFMOVSI, 1;SI 为被乘数MOVCX, 9LO

33、OP0:PUSHCXMOVCX, 9MOVDI, 1; DI 为乘数LOOP1:MOVAX, SIMULDIMOVDX, -1CMPAX, 10JAESKIPLEADX, SPACE;乘积不足两位时补一个空格SKIP:CALLWRITEDEC;输出乘积INCDILOOPLOOP1CALLCRLF;结束一行INCSIPOPCXLOOPLOOP0MOVAX, 4C00HINT21HCODEENDSENDSTART子程序 WRITEDEC输出时,数据前后各留出一个空格。程序中对一位数的乘积补上一个空格,这样每个数据共占用 4 个字符位置,使输出对齐。25. 编写程序,显示 1000 以内的所有素数。

34、答: INCLUDE YLIB.HCODE SEGMENTASSUMECS: CODESTART:CALLCRLFMOVSI, 2;SI 为被测试的 1000 以内的整数MOVCX, 0;CX 记录一行上已输出数据个数(每行输出 10 个素数)ONE:MOVDI, SISHRDI, 1;计算测试范围MOVBX, 2;第一个测试数据TST:CMPBX, DI;测试完成?JAOK;测试完成,是素数,转 OKMOVAX, SICWDDIVBX;除法测试CMPDX, 0JZNEXT;整除,本数据非素数,转 NEXTINCBX;形成下一个测试数据JMPTST;继续测试OK:INCCX;统计本行输出数据个

35、数CMPCX, 10JLE XORCALLOUTPUT CX, CX CRLF;本行数据未满;本行数据已满;输出回车换行10 个,10 个,直接输出清计数器OUTPUT:MOVDX, -1MOVAX, SICALLWRITEDEC;输出一个素数NEXT:INCSI;产生下一个被测试数据CMPSI, 1000JBONE;未完成,继续CALLCRLF;结束一行MOVAX, 4C00HINT21HCODEENDSENDSTART26. 编写程序,输入 N,计算:S=1*2+2*3+(N-1)*N答: INCLUDE YLIB.HCODE SEGMENTASSUME CS: CODEMESS1DB0D

36、H, 0AH,Input N please: $ 'MESS2DB0DH, 0AH,S= $'START:PUSHCSPOPDSLEADX, MESS1CALLREADDEC;输入 NMOVCX, AXXORBX, BX; BX 用作累加器ONE:MOVAX, CXMOVSI, AXDECSIMULSI;计算 J*(J-1)ADDBX, AX;累加LOOPONELEADX, MESS2MOVAX, BXCALLWRITEDEC;输出结果CALLCRLFMOVAX, 4C00HINT21HCODEENDSENDSTART27.编写程序,输入 N,输出如下矩阵(设 N=5)1111

37、 12222 13332 14432 15432 1答:设1为行(15), J为列(15),则(I, J)位置上的数据为:I( 6-J) ? I: 6-J 。INCLUDE YLIB.HCODE SEGMENTASSUMECS: CODESTART:CALLCRLFMOVSI, 1;SI为行号ROW:MOVCX, 5;CX为6-列号COL:CMPSI, CX;判断当前位置JBUPDOWN:MOVAX, CX;下半三角,取 6-列号JMPOUTPUTUP:MOVAX, SI;上半二角,取仃号OUTPUT:MOVDX, -1CALLWRITEDEC;输出一个数据LOOPCOLCALLCRLF;结束

38、本行INCSI;修改行号CMPSI, 5JBEROW;未满5行,继续MOVAX, 4C00HINT21HCODEENDSENDSTART28.根据下面条件,画出每次调用子程序或返回时的堆栈状态。(1)(2)(3)(4)(5)(6)解:主程序调用NEAR属性的SUB1子程序,返回的偏移地址为1200H.进入SUB1后调用NEAR属性的SUB2子程序,返回的偏移地址为2200H.进入SUB2后调用FAR属性的SUB3子程序,返回的段基址为 4000H,偏移地址为0200H。从SUB3返回SUB2后。从 SUB2返回 SUB1 后。SPSP从SUB1返回主程序后。程序后29. 编写几个简单的子程序。

39、(1) 显示一个字符的子程序。入口参数:DL与符的ASCII码。(2) 从键盘上读取一个字符的子程序。出口参数:读取字符的ASC码在CHAF中。(3)输出换行回车的子程序。无入口、出口参数。解:(1)SHOW PROCMOV AH, 02HINT 21HRETSHOW ENDP(2)READKEY PROCMOVAH, 01HINT21HMOVCHAR, ALRETREADKEY ENDP(3) CRLFPROCMOVAL, 0AHMOVAH, 02HINT21HMOVAL, 0DHINT21HRETCRLFENDP30. 阅读下面的子程序,叙述它完成的功能,它的入口参数和出口参数各是什么?

40、CLSCREENPROCMOVAX, 0600HMOVCX, 0MOVDH, XMOVDL, YMOVBH, 07HINT10HRETCLSCREENENDP解:屏幕窗口上卷,左上角为(0, 0),右下角为(y, x),卷入行属性为黑底白字。31. 编写程序,键入一个以$为结束符的数字串,统计其中“0”“ 9”各个数字出现的次数,分别存放到 S0S9这10个单元中去。解: .MODEL SMALL.DATAS0DB 0S1DB ?S2DB 0S3DB 0S4DB 0S5DB 0S6DB 0S7DB 0S8DB 0S9DB 0KEYINDB 100 DUP(0).CODESTART:MOVAX,

41、 DATAMOVDS, AXMOVCX, 0LEABX, KEYINNEXT:MOVAH, 01HINT21HCMPAL, '$'JZCOUNTINCCXMOVBX, ALINCBXJMPNEXTCOUNT: LEABX, KEYINCOUNT1:LEADI, S0MOVAL, BXENDSUBAL, 30HMOVAH, 0ADDDI, AXINCBYTE PTRDIINCBXLOOPCOUNT1MOVAX, 4C00HINT21HSTART32. 编写求绝对值的子程序,利用它计算 3 个变量的绝对值之和。 解: .MODEL SMALL.DATAVALUEDW-5, 5, -

42、10SUMDW0.CODESTART:MOVAX, DATAMOVDS, AXLEABX, VALUEMOVCX, 3MOVSUM, 0ONE:CALLABSADDSUM, AXADDBX, 2LOOPONEMOVAX, 4C00HINT21H; 子程序ABS; 功能:求一个字整数的绝对值; 入口:字整数的偏移地址在 BX中; 出口:该字整数的绝对值在 AX中ABSPROCMOVSUM, 0AGAIN:MOVAX, BXANDAX, AXJGESKIPNEGAXSKIP:RETABSENDPENDSTART33. 子程序计算从2开始的N(N<50)个偶数之和(2+ 4+ 6 +),主程序从键盘输入整数 N, 调用子程序求出 N个偶数之和,并显示结果。用以下3种方法编写完整程序。解: INCLUDE YLIB.H.MODEL.DATASMALLSUM DW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论