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, (X)
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, (X)
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, (X)
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
2、上机题目:数据查找内容:TABLE开始的字节单元中存放N个无符号数,dt单元存放一个已知数据X,现从TABLE中查找是否存在数据X,如果存在,NO单元存放该数据在TALBE中的序号,否则NO单元存放FFH 。
TABLE DB X1, (X)
dt DB x
no DB ?
data segment
table db 55h,01h,60h,12h,22h
count equ $-table
dat db 0h
no db ?
data ends
code segment
assume cs:code,ds:data start: mov ax,data
mov ds,ax
mov cx,count
mov si,0
mov al,dat
lop: cmp table[si],al
jz j0
inc si
loop lop j0: cmp cx,0
jnz next
mov al,0ffh
mov no,al
jmp done
next: mov ax,si
mov no,al jmp done
done: mov ah,4ch
int 21h code e nds
end start
1、上机题目:代码转换
内容:用子程序设计的方法,分别把BUF字单元中的四个十六进制数转换为ASCII代码存入MAS开始的单元中,并在crt上显示。
BUF DW X MAS DB 4 DUP(?)
data segment
buf dw 21ACh
mas db 4 dup(?) data ends
code s egment
assume cs:code,ds:data main proc near
mov ax,data
mov ds,ax
call decbin
mov ah,4ch
int 21h
main endp
decbin proc near
push d x
mov si,0
mov ch,4h
lop: mov cl,4h
mov ax,buf
rol ax,cl
mov buf,ax
and ax,0fh
cmp al,0ah
jb yes
add al,7
yes: add al,30h
mov mas[si],al
mov dl,al
mov ah,2
int 21h
inc si
dec ch
cmp ch,0
jnz lop
pop dx
ret
decbin endp
code e nds
end main。