大连理工大学计算机原理实验报告第四季,大连理工大学-计算机原理-习题4答案.doc...

dc9044ec604898353f6b3e18c2172abd.gif大连理工大学-计算机原理-习题4答案.doc

习题 4 请编写完整汇编程序 1. 内存中以 BUF 单元开始存放 8 个 16 位二进制数,试编程将 8 个数倒序后存放于 BUF开始的单元,试编程;(提示采用堆栈实现) data segment para buf dw 0001h,0002h,0003h,0004h,0005h,0006h,0007h,0008h data ends ssg segment stack db 256 dup0 ssg ends code segment assume cscode,dsdata,ssssg main proc far mov ax,data mov ds,ax mov bx,0 mov cx,8 a push bufbx add bx,2 loop a mov cx,8 lea bx,buf b pop bufbx add bx,2 loop b mov ax,4c00h int 21h main endp code ends end main 2. 将 8个 16位无符号数相加,结果保存在 32位无符号数 SUM中; data segment para buf dw 0001h,0002h,0003h,0004h,0005h,0006,0007h,0008h sum dd 0 data ends ssg segment stack db 256 dup0 ssg ends code segment assume cscode,dsdata,ssssg main proc far mov ax,data mov ds,ax lea bx,buf mov cx,8 a mov ax,bx cwd add word ptr sum,ax adc word ptr sum2,dx add bx,2 loop a mov ax,4c00h int 21h main endp code ends end main 3. 以十进制形式在计算机屏幕上显示内存中的一个 8位有符号数,例如若内存单元中存放的数据为 7FH,则在屏幕上显示 127,若内存单元存放的数据为 0FFH,则应在屏幕上显示 -1; data segment para var db 7FH str db the result is data ends ssg segment stack db 256 dup0 ssg ends code segment assume cscode,dsdata,ssssg main proc far mov ax,data mov ds,ax lea dx,str mov ah,09h int 21h mov dl, cmp var,0 jg s1 mov dl,- neg var s1 mov ah,02h int 21h mov al,var mov bl,10 mov cx,0 s2 and ah,0 div bl push ax inc cx cmp al,0 jnz s2 s3 pop ax mov dl,ah add dl,30h mov ah,02h int 21h loop s3 mov ax,4c00h int 21h main endp code ends end main 4. 从键盘输入一个 4位十进制数,然后以 16进制形式显示在屏幕上,试编程; 例如输入 1 0 2 4 在屏幕上应该显示 0400H DATA SEGMENT STR1 DB DATA BUF DB 20 DB 4 DB 4 DUP STR2 DB 0AH,0DH,THE RESULT IS , DATA ENDS SS_SEG SEGMENT STACK DB 100 DUP0 SS_SEG ENDS CODE SEGMENT ASSUME CSCODE, DSDATA, SSSS_SEG START MOV AX, DATA MOV DS, AX LEA DX,STR1 MOV AH,09H INT 21H MOV AH,0AH LEA DX,BUF INT 21H MOV CX,03H LEA SI,BUF2 AND BX,0H MOV DL,0AH LOP1 MOV AL,SI SUB AL,30H PUSH CX LOP2 MUL DL LOOP LOP2 POP CX ADD BX,AX INC SI LOOP LOP1 AND CH,00H MOV CL,SI SUB CL,30H ADD BX,CX LEA DX,STR2 MOV AH,09H INT 21H MOV AX,BX AND CH,00H MOV CL,04H MOV DH,04H MOV DL,00H AAA1 AND AX,000FH PUSH AX DEC DH INC DL SHR BX,CL MOV AX,BX CMP DH,0 JA AAA1 MOV CL,DL BBB POP DX CMP DL,09H JB NEXT ADD DL,07H NEXT ADD DL,30H MOV AH,2 INT 21H LOOP BBB MOV DL,H MOV AH,02H INT 21H MOV AX,4C00H INT 21H CODE ENDS END START 5. 数据段中存放有一个无符号字数据 VAR,将其转换成非压缩格式的 BCD 码,存于 BUF开始的单元中(高位在前); 例如若 VAR为 0800H,则转换后 BUF 20H BUF1 48H DATA SEGMENT PARA VAR DW 0800H BUF DB 2 DUP0 DATA ENDS SS_SEG SEGMENT STACK DW 100 DUP0 SS_SEG ENDS CODE SEGMENT PARA ASSUME CSCODE, DSDATA, SSSS_SEG START MOV AX, DATA MOV DS, AX MOV CX, 16 MAIN1 SHL VAR, 1 MOV BX, 4 PUSH CX MOV CX, 5 MAIN2 MOV AL, BUFBX ADC AL, AL AAA MOV BUFBX, AL DEC BX LOOP MAIN2 POP CX LOOP MAIN1 EXIT MOV AX, 4C00H INT 21H CODE ENDS END START 6. 内存中以 str1 和 str2 开始分别存放了两个字符串,结束符为 NULL( ASCII码为 0),将 str2 连接到 str1 后,形成 1 个字符串,并将连接后的字符串str1输出到屏幕上; DATA SEGMENT STR1 DB GOOD MORNING,,00H STR DB 50 DUP0 STR2 DB Mr WANG,0AH,0DH,00H DATA ENDS SS_SEG SEGMENT STACK DW 100 DUP0 SS_SEG ENDS CODE SEGMENT ASSUME CSCODE, DSDATA, SSSS_SEG START MOV AX,DATA MOV DS,AX LEA SI,STR1 MOV AL,SI CMP AL,00H JE JP1 JP2 INC SI MOV AL,SI CMP AL,00H JA JP2 JP1 MOV CX,01H LEA BX,STR2 MOV AH,BX MOV BX,AH CMP AH,00H JE JP3 MOV SI,AH JP4 INC SI INC BX INC CX MOV AH,BX MOV SI,AH CMP AH,00H JA JP4 JP3 INC SI MOV SI,BYTE PTR LEA DX,STR1 MOV AH,09H INT 21H MOV AX,4C00H INT 21H CODE ENDS END START 7. 统计 10个有符号字节数中,大于 0、小于 0、等于 0的个数,分别存放在 NUM1、NUM2、 NUM3 三个变量中,并找出最大值、最小值分别存放到 MAX、 MIN 变量中,再求 10个数的和,将结果存放到 16 位有符号数 SUM中。 DATA SEGMENT NUM DB 0F0H,03H,0B4H,0AH,0AAH,00H,80H,7FH,99H,21H COUNT EQU -NUM ORG 0010H NUM1 DB 0 NUM2 DB 0 NUM3 DB 0 MIN DB 0 MAX DB 0 SUM DW 0 DATA ENDS SS_SEG SEGMENT STACK DW 100 DUP0 SS_SEG ENDS CODE SEGMENT ASSUME CSCODE, DSDATA, SSSS_SEG START MOV AX,DATA MOV DS,AX MOV SS,AX LEA SI,NUM MOV CX,COUNT MOV BX,0000H MOV DX,0000H LOP MOV AL,SI INC SI CMP AL,0 JG DA JL XIAO JE DENG DA INC BH JMP AAA1 XIAO INC BL JMP AAA1 DENG INC DH AAA1 LOOP LOP LEA SI,NUM1 MOV SI,BH LEA SI,NUM2 MOV SI,BL LEA SI,NUM3 MOV SI,DH MOV CX,COUNT-1 MAIN1 LEA BX,NUM PUSH CX MAIN2 MOV AL,BX INC BX CMP AL,BX JLE NEXT XCHG AL,BX MOV BX-1,AL NEXT LOOP MAIN2 POP CX LOOP MAIN1 LEA SI,MIN MOV AL,NUM MOV SI,AL LEA SI,MAX MOV BL,NUM9 MOV SI,BL MOV SI,OFFSET NUM MOV CX,COUNT MOV AX,0 LOP2 AND BX,0 MOV BL,SI ADD AX,BX INC SI LOOP LOP2 LEA SI,SUM MOV SI,AX MOV AX,4C00H INT 21H CODE ENDS END START 8 若程序的数据段定义如下,写出各指令语句独立执行后的结果。 DSEG SEGMENT DATA1 DB 10H, 20H, 30H DATA2 DW 10 DUP String DB 123 DSEG ENDS 1 MOV AL, DATA1 2 MOV BX, offset DATA2 3 LEA SI, String ADD DI,SI 答( 1) 10H-AL ( 2) DATA2代表的首地址赋给 BX ( 3) String代表的首地址赋给 BX SIDI-DI 9 假设数据项定义如下 DATA1 DB HELLOGOOD MORNING DATA2 DB 20 DUP 用串操作指令编写程序段,使其分别完成一下功能。 ( 1) 从左到右将 DATA1中的字符串传送到 DATA2中; LEA SI,DATA1 LEA DI,DATA2 MOV CX,20 CLD REP MOVSB ( 2) 传送完后,比较 DATA1和 DATA2中的内容是否相同; LEA SI,DATA1 LEA DI,DATA2 MOV CX,20 CLD REPE CMPSB ( 3) 把 DATA1中 的第 3个字节和第四个字节装入 AX; LEA SI,DATA1 ADD SI,2 LODSW ( 4) 将 AX的内容存入 DATA25开始的字节单元中; LEA DI,DATA2 ADD DI,5 STOSW 10 执行下列指令后, AX寄存器中的内容是多少 TABLE DW 10,20,30,40,50 ENTRY DW 3 MOV BX, Offset TABLE ADD BX, ENTRY MOV AX,BX AX1400H 11 图示以下数据段在存储器中的存放形式; DATA SEGMENT DATA1 DB 10H, 34H, 07H, 09H DATA2 DW 2 DUP42H DATA3 DB HELLO DATA4 EQU 12 DATA5 DD ABCDH DATA ENDS 10H 34H 07H 09H 42H 00H 42H 00H 48H 45H 4CH 4CH 4FH 21H CDH ABH 00H 00H 存储器 12 阅读下边的程序段,试说明它实现的功能是什么 DATA SEGMENT DATA1 DB ABCDEFG DATA ENDS CODE SEGMENT ASSUME CSCODE, DSDATA AAAA MOV AX,DATA MOV DS,AX MOV BX, OFFSET DATA1 MOV CX,7 NEXT MOV AH,2 MOV AL, BX XCHG AL,DL INC BX INT 21H LOOP NEXT MOV AH,4CH INT 21H CODE ENDS END AAAA 此程序功能为输出字符串 ABCDEFG。 选做题 1. 在数据段的 str开始的单元中存放以 NULLASCII码 0结束的一个英文句子,试编程统计单词个数存于 words单元中。 单词间以空格和逗号分隔 ; 例如 str db long long ago, there lived a king , 0 统计后单词个数为 7 data segment para str1 db long long ago, there lived a king, the king asked the artist to db draw a horse for him ,0 words dw 0 data ends ss_seg segment stack db 256 dup ss_seg ends code segment assume cscode,dsdata,ssss_seg main proc far push ds xor ax, ax push ax mov ax, data mov ds, ax mov cx, 0 lea si, str1 mov bl, cld main_3 lodsb and al, al jz main_1 cmp al, jnz main_2 main_4 cmp bl, jz main_5 cmp bl, , jz main_5 inc cx jmp main_5 main_2 cmp al, , jz main_4 main_5 mov bl, al jmp main_3 main_1 cmp bl, jz main_6 cmp bl, , jz main_6 inc cx main_6 mov words, cx ret main endp code ends end main

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值