汇编作业题答案 下载本文

END START

(3)CODE SEGMENT

ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AX, 0 ;累加器在循环之前清零 MOV CX, 5 ;计数器置初值 MOV SI, 0 ;第0行第0列元素在数组内的位移 NEXT: ADD AX, ARRAY[SI] ADD SI, 5*2+2 ;SI指向正对角线上下一个元素 LOOP NEXT MOV SUM, AX MOV AX, 4C00H INT 21H CODE ENDS END START (4)CODE SEGMENT

ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AX, 0 ;累加器在循环之前清零 MOV CX, 5 ;计数器置初值 MOV SI, 4*2 ;第0行第4列元素在数组内的位移 NEXT: ADD AX, ARRAY[SI] ADD SI, (5-1)*2 ;SI指向反对角线上下一个元素 LOOP NEXT MOV SUM, AX MOV AX, 4C00H INT 21H CODE ENDS END START

22 编写程序,利用公式:N2=1+3+5+ ?? +(2N-1)计算N2的值,假设N=23。 解: DATA SEGMENT

N DW 23

SQUARE DW ? ;存放结果 DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX, N ;循环计数器置初值

XOR AX, AX ;累加器清零 MOV BX, 1 ;数列第一项 ONE: ADD AX, BX ADD BX, 2 LOOP ONE MOV SQUARE, AX MOV AX, 4C00H INT 21H CODE ENDS END START

23 设(BX)=0E3H,变量VALUE中存放内容为79H,指出下列指令单独执行后的结果。

(1)XOR BX, VALUE (2)AND BX, VALUE (3)OR BX, VALUE (4)XOR BX, 0FFH (5)AND BX, BX (6)AND BX, 0 答:

(1)指令“XOR BX, VALUE”执行后,(BX)= 009AH (2)指令“AND BX, VALUE”执行后,(BX)= 0061H (3)指令“OR BX, VALUE”执行后,(BX)= 00FBH (4)指令“XOR BX, 0FFH”执行后,(BX)= 001CH (5)指令“AND BX, BX”执行后,(BX)= 00E3H (6)指令“AND BX, 0”执行后,(BX)= 0000H

24 某密码的加密规则为:‘0’→‘A’,‘1’→‘B’,‘2’→‘C’,??。按照

以下要求编写程序。

(1) 把明文“96541833209881”翻译为密文。 (2) 把密文“JJBDAHCFFGA”翻译成明文。 答:

(1) 明文“96541833209881”翻译为密文。

CODE SEGMENT

ASSUME CS: CODE

TEXT1 DB ‘96541833209881’

TEXT2 DB 14 DUP(?) START: MOV BX, 0 MOV CX, 14 NEXT: MOV AL, TEXT1[BX] ;取出一字节明文 ADD AL, ‘A’-‘0’ ;转换成密文

(2)

MOV TEXT2[BX], AL ;保存 INC BX LOOP NEXT MOV AX, 4C00H INT 21H CODE ENDS END START

密文“JJBDAHCFFGA”翻译成明文。 CODE SEGMENT ASSUME CS: CODE

TEXT1 DB ‘JJBDAHCFFGA ’ TEXT2 DB 11 DUP(?) START: MOV BX, 0 MOV CX, 11 NEXT: MOV AL, TEXT1[BX] ;取出一字节密文 SUB AL, ‘A’-‘0’ ;转换成明文 MOV TEXT2[BX], AL ;保存 INC BX LOOP NEXT MOV AX, 4C00H INT 21H CODE ENDS END START

25 编写程序,从键盘上输入一行明文,按照题3.17的规则翻译成密文,向显示器输出。

答: DATA SEGMENT

MESS DB 0DH, 0AH, “Input some text please : $” OUTMESS DB 0DH, 0AH, ‘The text after convert :’

BUFFER DB 81, ?, 81 DUP(?)

DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX LEA DX, MESS MOV AH, 09H INT 21H ;输出提示信息 LEA DX, BUFFER MOV AH, 0AH

INT 21H ;输入一行明文 MOV CL, BUFFER+1 MOV CH, 0 ;输入字符个数送CX LEA BX, BUFFER+2 ;首字符地址送BX NEXT: MOV AL, [BX] ADD AL, ‘A’-‘0’ ;将一字节明文转换成密文 MOV [BX], AL ;保存 INC BX LOOP NEXT MOV BYTE PTR[BX], ‘$’ ;送字符串结束标记 MOV WORD PTR BUFFER, 2020H ;缓冲区前2字节改为空格 LEA DX, OUTMESS MOV AH, 09H INT 21H ;输出转换以后的结果 MOV AX, 4C00H INT 21H CODE ENDS END START

26 阅读以下程序,指出它的功能。 MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL

答:把32位二进制代码(DX, AX)联合左移4位。

27 已知(DX)=0B9H,(CL)=3,(CF)=1,确定下列指令单独执行以后DX寄存

器的值。

(1)SHR DX, 1 (2)SAR DX, CL (3)SHL DX, CL (4)SHL DL, 1 (5)ROR DX, CL (6)ROL DX, CL (7)SAL DH, 1 (8)RCL DX, CL (9)RCR DL, 1 答:

(1)指令“SHR DX, 1”执行之后,(DX)= 005CH (2)指令“SAR DX, CL”执行之后,(DX)= 0017H (3)指令“SHL DX, CL”执行之后,(DX)= 05C8H (4)指令“SHL DL, 1”执行之后,(DX)= 0172H

(5)指令“ROR DX, CL”执行之后,(DX)= 2017H (6)指令“ROL DX, CL”执行之后,(DX)= 05C8H (7)指令“SAL DH, 1”执行之后,(DX)= 00B9H (8)指令“RCL DX, CL”执行之后,(DX)= 05CCH (9)指令“RCR DL, 1”执行之后,(DX)= 00DCH

28 下面程序段执行完成后,BX寄存器的内容是什么? MOV CL, 3 MOV BX, 0B7H ROL BX, 1 ROR BX, CL

答:上面程序段执行完成后,(BX)= 0C02DH

29写程序,从键盘上输入一个0~65535之间的十进制无符号数,然后用二进制格式输出这个值。例如,键盘输入“35”,显示器输出“00000000 00100011”。 答: INCLUDE YLIB.H DATA SEGEMNT

MESS1 DB 0DH, 0AH, ‘Input a unsigned decimal integer number please : $’

MESS2 DB 0DH, 0AH, ‘The number in binary is : $’ DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX LEA DX, MESS1

CALL READDEC ;输入一个无符号整数 MOV BX, AX ;转存入BX LEA DX, MESS2 MOV AH, 09H INT 21H ;输出提示信息

MOV CX, 16 ;循环计数器置初值 AGAIN: SHL BX, 1 ;向左外移一位,进入CF MOV DL, 30H ADC DL, 0 ;形成一位二进制数字的ASCII代码 MOV AH, 2 INT 21H ;输出一个二进制数字 LOOP AGAIN ;循环16次 CALL CRLF MOV AX, 4C00H INT 21H CODE ENDS