福州大学汇编实验答案参考
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DATA SEGMENT
ARRAY DB 12,34,56,-12,-34,-9,0,3,0,-5,3,5 DB 0AH,0FFH,4,0,77H,88H,0F0H,0BBH COUNT EQU $-ARRAY
SUM1 DW 0 ;存正数累加和
SUM2 DW 0 ;存负数绝对值累加和
CUNT1 DB 0 ;存正数数据个数
CUNT2 DB 0 ;存负数数据个数
DATA ENDS
STACK1 SEGMENT PARA STACK
STA DW 20H DUP(0)
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA,SS:STACK1 START: MOV AX,DATA
MOV DS,AX
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
LEA SI,ARRAY
MOV CL,COUNT LOP: TEST B YTE PTR [SI],80H
JE PLUS
MOV CH,[SI] ; 求负数绝对值NEG CH
ADD BL,CH ; 负数绝对值累加
ADC BH,0
INC DL ; 个数计数JMP NEXT
PLUS: ADD AL,[SI] ; 正数累加ADC AH,0
INC DH ; 个数计数NEXT: INC SI
DEC CL
JNE LOP
MOV SUM1,AX ; 存结果
MOV SUM2,BX
MOV CUNT1,DH
MOV CUNT2,DL
MOV AH,4CH
INT 21H
COSEG ENDS
END START
2、上机题目:两个八位数的相加运算
内容:DAT开始的单元中存放两个八位二进制数,两个数相加后结果存入SUM单元中。(SUM为十六位)DAT DB X1,X2 SUM DW ?
无符号数有符号数
data segment
dat db 0feh,05h
sum dw ?
data ends
code segment assume cs:code,ds:data start:mov ax,data
mov ds,ax
mov al,dat
xor ah,ah
add al,dat+1
adc ah,0
mov sum,ax code ends
end start data segment
dat db 0feh,05h
sum dw ?
data ends
code segment assume cs:code,ds:data start:mov ax,data
mov ds,ax
mov al,dat
cbw
mov bx,ax
mov al,dat+1
cbw
add ax,bx
mov sum,ax code ends
end start
1、上机题目:统计正数(负数)的个数
内容:DAT开始的单元中存放N个字节有符号数,统计正数的个数存入T0单元中;负数的个数存入T1单元中;
Dat DB X1,……,XN
T0 DB ?
T1 DB ?
data segment
dat db 12,23,-45,-82,91,64,0,-2,4,37 count equ $-dat
t0 db ?
t1 db ?
data ends
code s egment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov cx,count
mov si,0 lop: test dat[si],80h
je plus
inc t1 ; 个数计数jmp next
plus: inc t0 ; 个数计数next: inc si
dec cx
cmp cx,0
jne lop
mov ah,4ch
int 21h
code e nds
end start
2、上机题目:无符号数排序
内容:TAB开始的单元中存放N个字节无符号数,请按照从大到小排序后,存入DAB单元中。(选作:从小到大排序)
TAB DB X1,……,XN
DAB DB N DUP(?)
data segment
tab db 01h,10h,05h,60h,30h,11h n equ $-tab
dab db n dup(?)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,0
mov cx,n
q:mov al,tab[bx]
mov dab[bx],al
inc bx
loop q
mov cx,n
dec cx
lop:
mov di,cx
mov bx,0
lop1: mov al,dab[bx] cmp al,dab[bx+1] jnb next
xchg al,dab[bx+1] mov dab[bx],al next: inc bx dec cx cmp cx,0 jnz lop1 mov cx,di dec cx cmp cx,0 jnz lop mov ah,4ch int 21h code ends end start
1、上机题目:求最大数(最小数)
内容:DAT开始的字单元中存放N个无符号数,求出最大数存入MAX单元中。
(求出最小数存入MIN单元中)
DAT DW X1,……,XN
MAX DW ?
MIN DW ?
data segment
dat dw 6,2,3,1,5,4,2 count equ ($-dat)/2 max dw ?
min dw ?
data ends
code segment assume cs:code,ds:data start: mov ax,data
mov ds,ax
mov cx,count-1
mov si,0 mov ax,dat[si]
mov bx,dat[si]
j0: add si,2
cmp ax,dat[si]
jnb j1
mov ax,dat[si]
j1: cmp dat[si],bx
jnb j2
mov bx,dat[si]
j2: loop j0
mov max,ax
mov min,bx
mov ah,4ch
int 21h
code ends
end start