DATA SEGMENT ORG 1000H DATA1 DB 1,2,3,??,50 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,100 LEA SI,DATA1+99 LEA DI,DATA+149 STD REP MOVSB MOV AH,4CH INT 21H CODE ENDS END START
9. 解:源程序如下:
data segment
org 0500H buffer1 db x1,x2,x3,??,x100 org 1000H buffer2 db 100 dup(?) data ends stack segment para stack ‘stack’
db 100 dup(?) stack ends code segment assume cs:code,ds:data,es:data,ss:stack start proc far begin: push ds mov ax,0 push ax mov ax,data mov ds,ax mov es,ax mov ax,stack mov ss,ax mov cx,100 cld lea si,buffer1 lea di,buffer2 again: lodsb cmp al,0 je stop stosb loop again stop: ret start endp
code ends end begin
10. 解:源程序如下: data segment array sum_e sum_o data code start: again: odd: addr: code
11.解:编程如下: data mem max data code begin:
next:
db x1,x2,??x100 db 2 dup(0) db 2 dup(0) ends segment assume cs:code,ds:data mov ax,data mov ds,ax mov sum_e,0 mov sum_e+1,0 mov sum_o,0 mov sum_o+1,0 mov cx,100 mov bx,0 mov al,array[bx] test al,01h jnz odd add sum_e,al adc sum_e+1,0 jmp short addr add sum_o,al adc sum_o+1,0 inc bx loop again mov ah,4ch int 21h ends end start segment
dw x1,x2,??,x100 dw ? ends segment
assume cs:code,ds:data mov ax,data mov ds,ax lea si,mem mov cx,100 cld lodsw
mov max,ax dec cx lodsw
test ax,0001h jnz nnop cmp ax,max jle nnop xchg ax,max nnop: loop next mov ah,4ch int 21h code ends end begin
12. 解:源程序如下:
dseg segment mem dw x1,x2,??,x100 err db ‘overflow!’,0dh,0ah,‘$’ result dw ? dseg ends cseg segment assume cs:cseg,ds:dseg begin: mov ax,dseg mov ds,ax xor ax,ax mov si,ax mov cx,100 sum: add ax,mem[si] jc ovf add si,2 loop sum mov bx,100 mov dx,0 div bx mov result,ax jmp short exit ovf: lea dx,err mov ah,9 int 21h exit: mov ah,4ch int 21h cseg ends end begin
13. 解:可编程如下:
data segment num dw a,b,c,d sum dw ? data ends stack segment para stack db 100 dup(?) top equ $-stack stack ends
stack’‘
code segment assume cs:code,ds:data,ss:stack calcul proc far start: push ds mov ax,0 push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov ax,top mov sp,ax lea bx,num mov cx,3 mov ax,[bx] again: mov dx,ax shl ax,1 push cx mov cl,3 shl dx,cl add ax,dx add ax,[bx+2] inc bx inc bx pop cx loop again mov sum,ax ret calcul endp code ends end start
注:a*10=a*2+a*8,可用逻辑左移指令实现乘法运算。
14. 解:源程序如下: data segment X dw x1 Y dw x2 Z dw x3 U dw ? data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ax,X or ax,ax jz clear mov ax,Y or ax,ax jz clear mov ax,Z
or ax,ax jz clesr add ax,X add ax,Y mov U,ax jmp exit clear: mov X,0 mov Y,0 mov Z,0 exit: mov ah,4ch int 21h code ends end start
15. 解:源程序如下:
dseg segment
buffer db x1,x2,??,x100 result db 3 dup(0) dseg ends cseg segment assume cs:cseg,ds:dseg start: mov ax,dseg mov ds,ax mov cx,100 mov si,0
next: mov al,buffer[si] cmp al,85 jb b85 inc result jmp short addr b85: cmp al,60 jb b60 inc result+1 jmp short addr b60: inc result+2 addr: inc si loop next mov ah,4ch int 21h cseg ends end start