汇编习题参考答案(5)

2019-08-03 10:40

dec di jnz sum3

mov [bx],al ; 存放行的小计 mov ax,0 inc bx loop sumh

; 下面按列求合计

lea bx, array mov loca,bx lea si, sumvd mov cx,10 mov di,4 sumv3:

mov ax,0 mov bx,loca sumv: add al, [bx] add bx,4 loop sumv mov [si],al mov cx,10 inc si inc loca dec di jnz sumv3 exit: mov ah,4ch int 21h code ends end start

6.1 过程定义如下,补充括号中的指令。

code segment assume cs:code main proc far ( PUSH DS ) ( XOR AX,AX ) ( PUSH AX ) … … … ret

main endp code ends

end main

21

6.2 补充下列程序括号中的指令,使得程序对堆栈的操作全部利用程序中定义的TOS堆栈,并画出程序执行后堆栈TOS中的数据。

data segment

dw 100 dup(?) tos label word data ends code segment

assume cs:code,ss:data main proc far

( MOV AX,DATA ) ( MOV SS,AX ) ( LEA SP,TOS ) push ds

xor ax, ax push ax

call far ptr suba

… ;假定此处指令的地址为cs=3400h,ip=30h … …

code ends

end main

6.3 以下两个独立程序模块,互相用到对方的变量和标号,你认为哪一个是主模

块?程序有没有错误?应该如何修改?

答:m1.asm是主模块,因为它有call m2,但没有说明外部符号,而m2必须是

过程名,var4,lab2也没有说明外部符号。var1 ,var2没有说明为PUBLIC。应加上:

EXTRN m2:FAR,var4:WORD PUBLIC var1, var2,lab1 并修改data segment为data segment PUBLIC 同理M2.asm应加上:

EXTRN var1:byte,var2:word extrn lab1:FAR PUBLIC t603b, var4 并修改data segment为data segment PUBLIC

以上完成主要修改,但程序依然有错,请仔细检查操作数类型是否匹配。

;m1.asm 如下: data segment var1 db ? var2 dw ? var3 dw ?

data ends code1 segment

assume cs:code1,ds:data

22

main proc far start: …

mov ax, data mov ds, ax

call m2

lab1: mov ax, var4 …

jmp lab2 ;去掉此指令 …

main endp code1 ends

end start

;m2.asm 如下: data segment var4 dw ? var5 dw ?

data ends code2 segment

assume cs:code2,ds:data

m2 proc far …

add dx,var1 ;var1为字节类型 add dx,var2 jmp lab1 …

M2 endp code2 ends end 6.4 主程序从键盘输入N位二进制数到缓冲区,用子程序将其转换为二进制数串显示。主程序和子程序共用数据缓冲区。 data segment buff db 9,?,9 dup (?) data ends code segment assume cs:code,ds:data main proc far start:

mov ax, data mov ds, ax lea dx, buff mov ah, 10 int 21h call outp

23

exit: mov ah,4ch int 21h main endp

outp proc near mov ah,2 mov dl,10 int 21h

mov cl, buff+1 mov ch,0

lea bx, buff+2 out1: mov dl, [bx] mov ah, 2 int 21h inc bx loop out1 ret outp endp code ends end start

6.5 主程序从键盘输入一个字符串到BUFF,再输入一个字符到AL,用子程序在字符串BUFF中查找是否存在该字符,如果找到,显示发现的字符位置。用寄存器传递要查找的字符。 ;search

data segment

mess1 db 13,10, 'input string:$' mess2 db 13,10, 'input a char:$' mess3 db 13,10, 'not found! $' mess4 db 13,10, 'found at: $'

org 40h

buff label byte max1 db 9 act1 db ? stok1 db 9 dup(?) data ends

code segment

assume cs:code, ds:data main proc far push ds sub ax,ax push ax

mov ax,data mov ds,ax

24

mov es,ax lea dx,mess1 mov ah,09

int 21h ;qust1? lea dx,buff mov ah,0ah

int 21h ;ans1

lea dx,mess2 mov ah,09

int 21h ;qust2?

mov ah,1

int 21h ;ans2 call near ptr scan ret main endp

scan proc near mov cl,act1 mov ch,0

lea di,stok1 repne scasb je found

nofd: lea dx,mess3 mov ah,9 int 21h jmp exit found:

lea dx,mess4 mov ah,9 int 21h sub act1, cl mov dl,act1 add dl,30h mov ah,2 int 21h

exit: ret scan endp code ends

end main

6.6 编写程序,从键盘输入一个字符串到BUFF,用子程序统计各字符出现的次数。 错误!

;numbers of every char to be found

25


汇编习题参考答案(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:三年级关于面积应用题100道

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: