当前位置:首页 > 微机原理与汇编语言程序设计课后习题参考答案
dec bx jnz lop1 mov ah, 4ch int 21h code ends
end start
15. 设数据段有两组无符号数据DA1和DA2。试编制一程序,对两组数据一一对应比较,分别统计DA1中大于、等于、小于DA2对应数据的个数。数据段的数据安排如下: DATA SEGMENT
DA1 DW ××,××,××,...... DA2 DW ××,××,××,......
COUT DB 0 ;存大于的个数 DB 0 ;存等于的个数 DB 0 ;存小于的个数 DATA ENDS 答:所求程序为: data segment
DA1 DW 7832h,65h,3a8bh,43dch,539h,39h,74h,128h,79h,4aah,0adh DA2 DW 785h,98h,78adh,238ah,539h,48h,49h,23dh,79h,4aah,289h const equ ($-da2)/type da2
COUT DB 0 ;存大于的个数 DB 0 ;存等于的个数 DB 0 ;存小于的个数 data ends code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax lea si, da1 lea di, da2 mov cx, const lop: mov ax, [si] cmp ax, [di] jle lab1 inc cout jmp lab3 lab1: jl lab2 inc cout+1 jmp lab3 lab2: inc cout+2 lab3: add si, 2 add di, 2 loop lop mov ah, 4ch
int 21h code ends
end start
16. 重写第7题的程序, 改用一个子程序实现0.5秒的延时。
答:设延时0.5秒需执行X条LOOP指令, 则有:2X=400*1000000*0.5,X=100000000=10000*10000 所求程序为: data segment
var1 db '请输入一个不超过9的数:$' data ends code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax
mov dx, offset var1 mov ah, 9 int 21h mov ah, 1 int 21h cmp al, 31h jl close cmp al, 39h jg close and ax, 0fh mov si, ax labm: call subp mov ah, 2 mov dl, 7 int 21h dec si jnz labm close:mov ah, 4ch int 21h subp proc
mov di, 10000 sup1: mov cx, 10000 sup2: loop sup2 dec di jnz sup1 ret subp endp code ends
end start
17. 重写第9题的程序, 改用一个子程序实现输入,一个子程序实现输出。
答:所求程序为: data segment
var1 db '请输入一串字符(不超过50个,遇回车结束):$' data ends
sta1 segment stack dw 50 dup (?) sta1 end code segment
assume cs:code, ds:data,ss:sta1 subp1 proc
mov si,0 mov cx, 50 sp11: mov ah, 1 int 21h cmp al, 0dh jz sp12 push ax inc si loop sp11 sp12: ret subp1 endp subp2 proc
mov cx, si sp21: pop bx mov dl, bl mov ah, 2 int 21h loop sp21 ret subp2 endp
start: mov ax, data mov ds, ax
mov dx, offset var1 mov ah, 9 int 21h call subp1 call subp2 mov ah, 4ch int 21h code ends
end start
18. 若下面的过程被同一代码段中的过程调用,请指出其中的错误。 SUBPR PROC
PUSH AX
ADD AX,BX ...... RET SUBPR ENDS
若被另一代码段中的过程调用呢?
答:被同一代码段中的过程调用时,过程定义的结束语句中有错误,应改为SUBPR ENDP 若被另一代码段中的过程调用时,过程定义的开始和结束语句中都有错误,应改为: SUBPR PROC FAR PUSH AX ADD AX,BX ...... RET SUBPR ENDP
19.试编制程序,对NUM中各数分别统计出有多少个20,余下有多少个5,再余下有多少个2,再余下有多少个1。 统计的各数分别存放在NUM20,NUM5,NUM2,NUM1的对应位置中,程序要求用主程序子程序形式编制,而且用两种参量传递方法分别编制主程序和子程序)数据段如下:
DATA SEGMENT
NUM DW 0133H,005FH,1234H COUNT EQU ($-NUM)/TYPE NUM NUM20 DB COUNT DUP(0) NUM5 DB COUNT DUP(0) NUM2 DB COUNT DUP(0) NUM1 DB COUNT DUP(0) DATA ENDS 答:所求程序为: DATA SEGMENT
NUM DW 0133H,005FH,1234H COUNT EQU ($-NUM)/TYPE NUM NUM20 DB COUNT DUP(0) NUM5 DB COUNT DUP(0) NUM2 DB COUNT DUP(0) NUM1 DB COUNT DUP(0) DATA ENDS code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax mov cx, const mov si, 0
lop: mov ax, num[si] div 20 mov bh, ah
mov num20[si], al
共分享92篇相关文档