2022年2022年汇编语言程序设计习题解答 .pdf

上传人:Che****ry 文档编号:27232660 上传时间:2022-07-23 格式:PDF 页数:21 大小:177.71KB
返回 下载 相关 举报
2022年2022年汇编语言程序设计习题解答 .pdf_第1页
第1页 / 共21页
2022年2022年汇编语言程序设计习题解答 .pdf_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《2022年2022年汇编语言程序设计习题解答 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言程序设计习题解答 .pdf(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、汇编语言程序设计习题解答1 指出下列指令的错误: (1)MOV AH, BX (2)MOV BX,SI (3)MOV AX, SIDI (4)MOV MYDATBXSI,ES :AX (5)MOV BYTE PTRBX,1000 (6)MOV BX, OFFSET MYDATSI (7)MOV CS, AX 答: (1)MOV AH ,BX AH 为八位, BX为 16 位( 2)MOV BX ,SI 两个操作数不能都是存储单元( 3)MOV AX , SIDI 一个操作数中不能用两个变址寄存器( 4)MOV MYDAT BXSI ,E8:AX ES ES 后应为一个变址寄存器,表示偏移量(

2、5)MOV BYTE PTRBX,1000 BYTE 说明时 BX进行字节操作。而 1000 为字( 6)MOV BX ,OFFSET MYDAT SI OFFSET 为取某个地址的偏移量,故后面不应用SI ,而应是一个符号地址。(7)MOV 是数据寻址,不应用程序段寄存器CS. 2下面哪些指令是非法的?( 假设 OPl,OP2是已经用DB定义的变量 ) (1)CMP l5, BX (2)CMP OPl,25 (3)CMP OPl,OP2 (4)CMP AX, OPl 答: (1) CMP 15,BX 非法,两个操作数不能一个为字,一个为字节( 2)CMP OP1 ,25 正确( 3)CMP

3、OP1 ,OP2 正确( 4)CMP AX, OP1 非法,两操作数不能一个为字,一个为字节3假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? (1)MOV BP, AL (2)MOV WORD_OPBX+4*3DI,SP (3)MOV WORD_OPl ,WORD_OP2 (4)MOV AX, WORD_OPlDX (5)MOV SAVE_WORD , DS (6)MOV SP, SS :DATA_WORDBXSI (7)MOV BXSI,2 (8)MOV AX ,WORD_ OPl+WORD_OP2 (9)MOV AX ,WORD_ OPl

4、-WORD_OP2+100 (10)MOV WORD_ OPl,WORD_ OPl-WORD_OP2 答: (1)MOV BP ,AL 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 非法, BP为 16 位 AL为八位(2)MOV WORD_OPBX+4*3DI ,SP 正确(3)MOV WORD_OP1 ,WORD_OP2 非法,两个操作数不能都是变量(4)MOV AX , WORD_OP1DX 非法, DX 应改为 BX

5、 ,BP ,SI 或DI ,则为寄存器相对寻址。(5)MOV SAVE_WORD ,DS 非法,未指明数据段地址DS的偏移量(6)MOV SP ,SS:DATA_WORDBXSI 非法, SS与BX ,SI 不匹配, SS的偏移量用SP (7)MOV BXSI ,2 正确(8) MOV AX,WORD_OP1+WORD_OP2 正确(9) MOV AX, WORD_OP1WORD_OP2+100 正确(10)MOV WORD_OP1,WORD_OP1WORD_OP2 非法4假设 VAR1和 VAR2为字变量, LAB为标号,试指出下列指令的错误之处: (1)ADD VAR1,VAR2 (2)S

6、UB AL, VAR1 (3)JMP LABSI (4)JNZ VARl (5)JMP NEAR LAB 答: (1) ADD VAR1,VAR2 ADD指令中,目的操作数必须是寄存器或存储单元。( 2)SUB AL, VAR1 AL为 8 位的,而 VAR为字变量16 位( 3)JMP LAB SI 格式不对, LAB处应为一偏移量,而不是标号。( 4)JNZ VAR1 JNZ 为非零转移,应转移到某个程序段,故后面应为一个标号。( 5)JMP NEAR LAB 段内直接转移,格式应为 JMP NEAR PTR LAB 5画图说明下列语句所分配的存储空间及初始化的数据值。BYTE-VAR D

7、B BYTE , 12,-12H,3DUP (0,?, 2DUP (1,2) ,?)WORD-VAR DW 5DUP(0,1,2),?,-5, BY , TE, 256H 解答: (1)BYTE-VAR (2)WORD-VAR 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - B Y T E 12 -12H 6试列出各种方法,使汇编程序把5150H 存入一个存储器字中。解答: (1) DW 5150H; ( 2)DB 50H,5

8、1H; (3)DB PQ 7请设置一个数据段DATASG ,其中定义以下字符变量或数据变量。FLD1B为字符串变量: personal computer ;FLD2B为十进制数字节变量:32;FLD3B为十六进制数字节变量:20;FLD4B为二进制数字节变量:01011001;FLD5B为数字的 ASCII 字符字节变量:32654;FLD6B为 10 个零的字节变量;FLD7B为零件名( ASCII 码)及其数量(十进制数)的表格:PART1 20 PART2 50 PART3 14 FLD1W为十六进制数字变量:FFF0;FLD2W为二进制数字变量:01011001;FLD3W为( 7)中

9、零件表的地址变量; 42 59 54 45 OC F4H 0 - 1 2 1 2 - 0 - 1 2 1 2 - 0 - 1 2 1 2 - 00 00 01 00 02 00 00 00 01 00 02 00 - - FB FF 59 42 45 54 56 02 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - FLD4W为包括 5 个十进制数的字变量:5,6,7,8, 9;FLD5W为 5 个零的字变量;FLD6W为本段

10、中字数据变量和字节数据变量之间的地址差。解答: DATASG SEGMENT FLD1B DB personal computerFLD2B DB 32D FLD3B DB 14H FLD4B DB 01011001B FLD5B DB 32654 FLD6B DB 10DUP (0)FLD7B DB PART1 ,20D, PART2 ,50D, PART3 ,14D FLD1W DW 0FFFOH FLD2W DW 01011001B FLD3W DW FLD7B FLD4W DW 5,6,7,8, 9 FLD5W DW 5DUP (0)FLD6W DW FLD1W-FLD1B DATAS

11、G ENDS 8假设程序中的数据定义如下:PARTNO DW ?PNAME DB 16 DUP (?)COUNT DD ?PLENTH EQU $-PARTNIO 问 PLENTH 的值为多少?它表示什么意义?解答: PLENTH 代表着 PARTNO 至 PLENTH 的地址差,也即三段数据的字节数PLENTH=22 。9有符号定义语句如下:BUFF DB 1,2,3, 123EBUFF DB 0 L EQU EBUFF-BUFF 问 L 的值为多少?解答: L=6 10假设程序中的数据定义如下:LNAME DB 30 DUP(?)ADDRESS DB 30 DUP (?)CITY DB 1

12、5 DUP(?)CODE-LIST DB 1, 7,8,3,2 (1) 用一条 MOVE 指令将 LNAME 的偏移地址放入AX 。(2) 用一条指令将CODE-LIST的头两个字节的内容放入SI。(3) 写一条伪操作使CODE-LENGTH 的值等于CODE-LIST域的实际长度。解答: (1)MOVE AX ,0FFSET LNAME ; (2)MOVE SI,0701H;(3)DE-LENGTH EQU LENGTH CODE-LIST。11试写出一个完整的数据段DATA_SEG,它把整数5 赋与一个字节,并把整数-1 ,0,2,5和 4 放在 10 字数组 DATA_LIST的头 5

13、个单元中。然后写出完整的代码段,其功能为:把 DATA-名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - _LIST 中头 5 个数中的最大值和最小值分别存入MAX 和 MIN单元中。解答: DATA_SEG SEGMENT LENGTH DB 5 DATA_LIST DW 1,0,2,5,4,5DUP(?) MAX DW ? MIN DW ? DATA_SEG ENDS CODE_SEG SEGMENT ASSUME CS:C

14、ODE_SEG,DS:DATA_SEG START:MOV AX,DATA_SEG MOV DS,AX MOV SI,OFFSET DATA_LIST MOV AX,SI MOV BX,SI MOV CX,LENGTH XOR AX,AX XOR BX,BX CLC AGAIN:CMP AX,SI JG NEXT1 MOV AX,SI NEXT1:CMP BX,SI JNG NEXT2 MOV BX,SI NEXT2:JNZ AGAIN MOV MAX,AX MOV MIN,BX CODE ENDS END START 12给出等值语句如下:ALPHA EQU 100 BETA EQU 25

15、GAMMA EQU 2 下列表达式的值是多少?(1)ALPHA*100+BETA (2)ALPHA MOD GAMMA+BETA (3) (ALPHA+2 )*BETA-2 (4) (BETA/3)MOD5 (5) (ALPHA+3 )* (BETA MOD GAMMA)(6)ALPHA GE GAMMA (7)BETA AND 7 (8)GAMMA OR 3 解答:(1)=10025; (2)=19; ( 3)=2548; (4)=3; (5)=103; (6)=0; (7)=01H; ( 8)=03H。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -

16、 - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - 13对于下面的数据定义,三条指令分别汇编成什么?TABLEA DW 10 DUP (?)TABLEB DB 10 DUP (?)TABLEC DB 1234 MOVE AX,LENGTH TABLEA MOVE BL ,LENGTH TABLEB MOVE CL ,LENGTH TABLEC 解答:MOVE AX ,10 MOVE BL ,10 MOVE CL ,1 14对于下面的数据定义,各条MOVE 指令单独执行后,有关寄存器的内容是什么?FLDB DB TAB

17、LEA DW 20DUP(?)TABLEB DB ABCD MOVE AX ,TYPE FLDB MOVE AX ,TYPE TABLEA MOVE CX ,LENGTH TABLEA MOVE DX ,SIZE TABLEA MOVE CX ,LENGTH TABLEB 解答:AX=0001H AX=0002H CX=0014H DX=0028H CX=0001H 。15指出下列伪操作表达方式的错误,并改正之。 (1)DATA_SEG SEG (2)SEGMENT CODE (3)MYDATA SEGMENTDATA ENDS (4)MAIN_PROC PROC FAR END MAIN_P

18、ROC MAIN_PROC ENDP 答: (1) DATA-SEG SEGMENT (2) CODE SEGMENT PARA CODE (3) /DATA错。定义数据段应在代码段中用ASSUME。 ENDS 缺少 MYDATA 。 (4) 多余 END ,MAIN-PROC 应删除。16按下面的要求写出程序的框架 (1)数据段的位置从0E000H开始, 数据段中定义个l00 字节的数组, 其类型属性既是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - -

19、- - - - - - - 字又是字节; (2)堆栈段从小段开始,段组名为STACK , (3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值; (4)程序结束。答: DATA-SEG SEGMENT ORG 0E000H BYTE-ARRAY LABLE BYTE WORD-ARRAY DW 50 DUP(?) DATA-SEG ENDS STACK-SEG SEGMENT PARA STACK STACK-SEG ENDS CODE-SEG SEGMENT ASSUME CS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEG ORG 1000H ST

20、ART: MOV AX ,DATA-SEG MOV DS ,AX MOV AX ,STACK-SEG MOV SS ,AX . . CODE-SEG ENDS END START 17假设在数据段X_SEG 、附加段 Y_SEG 和堆栈段Z_SEG中分别定义了字变量X,Y和 Z。试编制一完整的程序计算 XX+Y+Z 答: X-SEG SEGMENT X DW ? X-SEG ENDS Z-SEG SEGMENT Z DW ? Z-SEG EMDS Y-SEG SEGMENT Y DW ? Y-SEG ENDS CODE SEGMENT MAIN PROC FAR ASSUME ES:Y-SEG

21、,CS:CODE,DS:X-SEG,SS:Z-SEG START PUSH DS SUB AX AX PUSH AX MOV AX ,Y_SEG MOV ES ,AX MOV AX,Z_SEG 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - MOV SS,AX MOV AX,X_SEG MOV DS,AX MOV AX,DS:X MOV BX,ES:Y ADD AX BX JO OVERFLOW MOV BX ,SS:Z AD

22、D AX,BX JO OVERFLOW MOV DS:X,AX OVERFLOW :RET MAIN ENDP CODE ENDS END START 18 写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的 AUGEND 和附加段E_SEG中的 ADDEND 相加,并把结果存放在D_SEG 段中的 SUM 中。其中 AUGEND、 ADDEND 和 SUM均为双精度数,AUGEND 赋值为 99251,ADDEND 赋值为 -15962 。解答: TITLE SUM D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DW 2

23、DUPL (?) D_SEG ENDS E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962 E_SEG ENDS C_SEG SEGMENT ASSUME DS :D_SEG ,ES:E_SEG ,CS:C-SEG MAIN PROC FAR START :PUSH DS MOVE AX,0 PUSH AX MOV AX,D_SEG MOV DS ,AX MOV AX,E_SEG MOV ES,AX ADDT :MOV AX,AUGW MOV BX,AUGW+2 ADD AX, ES : ADDW ADC BX, ES: ADDW+2 MOV SUM

24、,AX MOV SUM+2,BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - RET MAIN ENDP C_SEG ENDS END START 19读下面程序段,请问:在什么情况下,本段程序的执行结果是AH 0? BEGIN: IN AL,5FH TEST AL,80H JZ BRCHl MOV AH,0 JMP STOP BRCHl: MOV AH , 0FFH STOP : HLT 解答: AL中的最高位为1 时。

25、20读程序: START: IN AL,20H MOV BL,AL IN AL, 30H MOV CL,AL MOV AX,0 ADLOP: ADD AL,BL ADC AH,0 DEC CL JNZ ADLOP HLT 请问 : (1)本程序实现什么功能? (2)结果在哪里 ? 解答:完成20H*30H,结果在 AX中。21请编一程序段完成AX*l0 的任务 ( 要求不准用乘法指令做) 。解答: MOV BX,AX MOV CL 2 SHL AX, CL ADD AX,BX SHL AX ,1 22 编程序使: (1)AX寄存器低4 位清零。 (2)BX寄存器低4 位置“ 1” 。 (3)C

26、X寄存器低4 位变反。 (4)用 TEST指令测试DL寄存器位3、位 6 是否同时为0,若是,将 0 送 DL ;否则 l 送 DH 。解答:1,AND AX ,0FFF0H 2,OR BX ,000FH 3,XOR CX ,000FH 4,TEST DL ,48H JZ LOOP MOV DH,1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - HLT LOOP :MOV DL ,0 HLT 23编一程序段,完成符号函数(-

27、128 x127) : 1 (x.0) y= 0 (x=0) -1 (x0) 假设 x 的值存放在DATAl中, y 的值存放在DATA2中。解答: START :MOV AL ,DATA1 AND AL,AL JGE BIGR MOV AL,0FFH MOV DATA2.AL HLT BIGR:JE EQUL MOV AL,1 MOV DATA2,AL HLT EQUL:MOV DATA2,AL HLT 24 设 AX寄存器中有一个16 位二进制数,编一程序,统计AX中“l ”的个数,统计结果送 CX中。解答: START :MOV CX ,0 LOOP: SUB AX,0 JZ STP S

28、AL AX,1 JNC NOD INC CX NOD:JMP LOOP STP:HLT 25编一子程序利用XLAT指令把十六进制数转换成ASCII 码。假设ASCII 码存放在以 DAT1 为首地址的数据区中,对应的16 进制数放在以DAT2为首地址的数据区中,转换结果送以DAT3为首地址的数据区中。解答: MAIN :PUSH BX PUSH SI PUSH DI PUSH CX PUSH AL PUSH DS START:MOV BX,DATA1 MOV SI ,DATA2 MOV DI DATA3 MOV CX ,16 NEST:LODSB 名师资料总结 - - -精品资料欢迎下载 -

29、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 21 页 - - - - - - - - - XLAT DATA1 STOSB LOOP NEST POP DS POP AL POP CX POP DI POP SI POP BX RET 26.( 略) 27试分三种情况说明:当 NUM 字节单元中数据是什么情况时,TEMP 字节单元分别是多少? NUM DB XX TEMP DB ? MOV AL,NUM TEST AL,99H JNE RES AND AL,99H JMP END0 RES: JS NE INC

30、 AL JMP END0 NE : DEC AL END0 : MOV TEMP,AL 答: NUM 字节单元中的数据是一个八位2 进制数。当其第1、4、5、8 位均为 0 时,将此数装入 temp 单元,若不满足此条件,则又分为两种情况,其最高位为1 时(负数),将此数减1 装入 temp 单元;其最高位为0 时(正数),将此数加1 装入 temp 单元。28试编制一程序, 把 CHAR1 中各小写字母分别转换为对应的大写字母,并存放在 CHAR2各字节单元中: CHAR1 DB capitalize CHAR2 DB $-CHAR1 DUP(?) 解答: MOV CX ,0AH MOV S

31、I ,0 MOV AX , 1AH LOOP1: ADD AX ,CHAR1SI MOV CHAR2SI, AX INC SI LOOP LOOP1 29试编制一程序,把DA_BYl 字节单元中数据分解成三个八进制数,其高位八进制数存放在 DA-BY2字节单元中,最低位存放在DA_ BY2+2字节单元中。 DA_BY1 DB 6BH 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 21 页 - - - - - - - - - DA_BY2 DB 3 DUP(0) 解答:

32、 MOV AL ,DA-BY1+1 SHR AL ,2 MOV DA-BY2 ,AL MOV AL ,DA-BY1 AND AL ,07H ; (0,111) MOV DA-BY2+2,AL 30试编制一程序,找出DA数据区中带符号的最大数和最小数。解答: MOV CX , LENGTH MOV BX ,0000H MOV DX ,0000H MOV SI ,0000H LOOP1: MOV AX , ADDRESSSI CMP AX ,80H JGE W1 CMP AX ,BX JG W2 INC SI LOOP LOOP1 HLT W1: CMP AX ,DX JGE W3 JMP LOO

33、P1 W3: MOV DX ,AX JMP LOOP1 W2: MOV BX ,AX JMP LOOP1 31 试编制一程序,统计出某数组中相邻两数间符号变化的次数。解答: MOV CX ,LENGTH MOV SI ,0 MOV AX ,ADDRESSSI AND AX ,80H INC SI MOV BX ,ADDRESSSI AND BX ,80H SUB BX ,AX NEG BX CMP BX ,80H JG W1 LOOP LOOP1 HLT W1 INC DX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精

34、心整理 - - - - - - - 第 12 页,共 21 页 - - - - - - - - - JMP LOOP1 HLT 32设某数据段已有N 个学生的某科成绩( 百分制 ) ,并按学号的次序存放在以STUD为首址各字单元的低字节中。现在要求按成绩的高低记入名次,并把名次填入成绩所在字单元的高字节中,各字单元的信息格式为: 15 8 7 0 名次成绩成绩相同者,名次相同。试编制一程序实现上述要求( 不要排序 ) 。解答: START: MOV BX , OFFSET STUD MOV DX ,OFFSET STUD ; BX ,DX中放置成绩表的偏移地址 MOV CX , N1 ;CX中

35、放置的是要比较的次数 MOV SI , 0 ;名次放在SI 中 LOOP1 : MOV AL,DX LOOP2 : MOV BX , BX+2 ;取下一个同学的成绩 CMP AL , BX JA NEXT ; 如果比下一个同学成绩高则到NEXT即使名次加一 DEC CX ;否则计数值减一 JNE LOOP2 ;计数不为零再循环取下一个同学成绩 MOV DX+1 ,SI HLT NEXT: ADD SI , 1 ;名次加一 DEC CX JNE LOOP2 MOV DX+1,SI ;如果计数为零比较完毕,最后将名次放到与成绩相连的单元中去 MOV DX , DX+2 ;取下一个成绩去和其他N 1

36、 个数比较 LOOP LOOP1 HLT END START 33试编制程序,分别对NUM 中各数统计出有多少个20,余下有多少个5,再余下有多少个 2,再余下有多少个1。统计的各数分别存放在NUM20 ,NUM5 ,NUM2 ,NUM1 的对应位置中, 程序要求用主程序子程序形式编制,而且用两种参量传递方法分别编制主程序和子程序。数据段如下: DATA SEGMENT NUM DW 0133H,0D5FH ,1234H COUNT EQU ($-NUM )/TYPE NUM NUM20 DB COUNT DUP(0) NUM5 DB COUNT DUP (0) NUM2 DB COUNT D

37、UP (0) NUM1 DB COUNT DUP (0) DATA ENDS 解答: DADA SEGMENT NUM DW 0133H , 0D5FH,1234H 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 21 页 - - - - - - - - - COUNT EQU ($-NUM )/TYPE NUM NUM20 DB COUNT DUP (0) NUM5 DB COUNT DUP(0) NUM2 DB COUNT DUP(0) NUM1 DB COUNT

38、DUP(0) CMPNUM DB 20,5,2,1 DATA ENDS CODE SEGENT ASSUME DS:DATA ASSUME CS:CODE MAIN PROC FAR START: MOV AX,DATA MOV DS ,AX MOV DX ,OFFSET NUM20 MOV CX ,COUNT MOV BX ,OFFSET CMPNUM MOV SI ,0 MOV DI , 0 CALL CMPDATA CMPDATA PROC NEAR PUSH AX PUSH DX LOOP: MOV DX , DI LOOP1: MOV AX, SI CMP AX ,DX JE NEX

39、T INE SI LOOP LOOP1 JMP AGAIN NEXT: ADD BXSI ,1 INC SI LOOP LOOP1 AGAIN: MOV CX ,4 ADD DI , COUNT LOOP LOOP HLT PUSH DX PUSH AX CMPDADT ENDP MAIN ENDP CODE ENDS END START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 21 页 - - - - - - - - - 34 已知两个正整数BE1(114)

40、和 BE2(014) , 但是,BEl+BE215。 试编制一程序, 把 DA_WORD字单元的内容从第BE1位开始, 自左至右的BE2个位清零, 其余各位保持不变。处理的数据放在 RESU单元中。解答: MOV BL ,BE1 MOV CX ,BE2 MOV DX ,0 LOOP: MOV AX ,1 SAL AX , BL ADD DX,AX DEC BX DEC CX JNZ LOOP ; 此循环的目的是保证DX中的 16 位数的 DE1位到其后BE2个位全部为一NOT DX ;将 DX中的数取反,保证BE1位到 BE2位个数全为零,其他为1 MOV BX, OFFSET DA-WORD

41、 AND BX , DX 35编写一条宏指令CLRB ,完成用空格符将一字符区中的字符取代的工作。字符区首地址及其长度为变元。解答: CLRB MACRO n , cblock MOV CX , n ;长度为n MOV AL , ;把空格送到AL中LEA DI, cblock ;DI 中放字符区首地址REP STOSB ;重复操作直到CX=0 ENDM 36某工厂计算周工资的方法是每小时的工资率RATE乘以工作时间HOUR ,另外每工作满十小时加奖金3 元,工资总数存放在WAG 中,请将月工资的计算编写成一条宏指令WAGES,并展开宏调用: WAGES R1 ,42 解答:宏定义:WAGES

42、MACRO RATE,HOUR MOV AL ,HOUR MUL RATE MOV BX ,AX MOV AX ,HOUR DIV 10 MUL 3 ADD BX ,AX MOV WAG,BX ENDM 宏调用:WAGES R1 ,42 宏展开:MOV AL ,42 MUL R1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 21 页 - - - - - - - - - MOV BX ,AX MOV AX ,42 DIV 10 MUL 3 ADD BX ,AX MOV

43、 WAG,BX 37给定宏定义如下: DIF MACRO AX, Y MOV AX, X SUB AX, Y ENDM ABSDIF MACRO V1, V2,V3 LOCAL CONT PUSH AX DIF V1,V2 CMP AX,0 JGE CONT NEG AX CONT : MOV V3, AX POP AX ENDM 试展开以下调用,并判定调用是否有效。 (1)ABSDIF Pl,P2, DISTANCE (2)ABSDIF BX,SI,XD1 ,CX (3)ABSDIF BXS1,XBXS1 ,240H (4)ABSDIF AX,AX , AX 解答: (1)宏展开:+ PUS

44、H P1 + MOV P1 , X + SUB P1 ,P2 + CMP P1,0 + JGE ? 0000 + NEG P1 +? 0000: MOV DISTANCE ,P1 + POP P1 调用有效(2)宏展开: + PUSH BX + MOV BX, X + SUB BX, SI + CMP BX, 0 + JGE ? 0000 + NEG BX +? 0000 MOV XDI , BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 21 页 - - - -

45、 - - - - - + POP BX (3)宏展开: + PUSH BXSI + MOV BXSI , X + SUB BXSI,XBXSI + CMP BXSI ,0 + JGE ? 0000 + NEG BXSI + ? 0000: MOV 240H BXSI POP BXSI (4)宏展开: + PUSH AX + MOV AX , X + SUB AX ,AX + CMP AX ,0 + JGE ? 0000 + NEG AX ? 0000: MOV AX AX POP AX 调用有效38 试编制宏定义, 要求把存储器中的一个用EOT字符结尾的字符串传送到另一个存储区去。解答: SE

46、ND MACRO SCHARS,DCHARS LOCAL NEXT,EXIT PUSH AX PUSH SI MOV SI,0 NEXT :MOV AX ,SCHARSSI MOV DCHARSSI,AL CMP AL,24H JZ EXIT INC SI JMP NEXT EXIT:ENDM 39宏指令BIN_SUB完成多个字节数据连减的功能: RESULT (A-B-C-D- , ) 要相减的字节数据顺序存放在首地址为OPERAND 的数据区中, 减数的个数存放在COUNT 单元中,最后结果存入RESULT 单元。请编写此宏指令。解答: BIN-SUB MARCO OPERAND , CO

47、UNT , RESULT MOV AX OPERAND+1 LOOP 1: CMP COUNT ,0 JNG EXIT MOV BX OPERAND+2 SUB AX ,BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 21 页 - - - - - - - - - DEC COUNT INC OPERAND LOOP LOOP1 EXIT: MOV RESULT AX ENDM 40请用宏指令定义一个可显示字符串GOOD: GOOD STUDENTS:CLASSX

48、NAME ,其中 X和 NAME在宏调用时给出。解答: MSGGEN MACRO LAB ,X, NAME LAB DB GOOD: GOOD STUDENTS:CLASS&X &NAME LOOP PRINTIT PRINTIT: MOV DL LAB+1 ;将 ASCII 代码串放入DL MOV AH ,2 INT 21H DEC LAB ENDM 缺 41 42定义宏指令并展开宏调用。宏指令JOE 把一串信息MESSAGE NO.K存入数据存储区XK中。宏调用为: I=0 JOE TEXT,I JOE TEXT,I JOE TEXT,I 解答: joe macro a,j ; macro

49、 a,%j; j=j+1 endm mary macro x,k; x&k db message no, &k; endm i=o joe text ,i + text0 dbmessage no.o joe text , i + text1 db message no.1 joe text, i +text db message no.2 43大多数DOS功能调用都需要在AH寄存器中存放不同的功能码。请将这种功能调用定义成宏指令DOS21 。再定义宏指令DISP 完成显示字符的功能,其中可使用已定义的DOS21 。然后展开宏调用DISP * 。解答: DOS21 MACRO NUM 名师资料

50、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 21 页 - - - - - - - - - MOV AH ,NUM INT 21H EDM DISP MACRO ZIFU MOV DI, ZIFUDOS21 02H ENDM 宏调用:DISP * 宏展开:MOV DL , * MOV AH ,02H INT 21H 44宏指令STORE 定义如下: STORE MACRO X , N MOV X+I,I I I+1 IF I - N STORE X,N ENDIF ENDM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com