
1
DATA SEGMENT
X DB 8
Y DB 6
Z DB
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV AL,X
SHL AL,1
SHL Y,1
ADD AL,Y
SHR AL,1
MOV Z,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
MOV
2
DATA SEGMENT
ARY1 DB 12,13,16,18,19,20,30,94
ARY2 DB 8 DUP ()
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,ARY1
LEA DI,ARY2
MOV CX,8
CLD
REP MOVSB
MOV AH,4CH
INT 21H
CODE ENDS
END START
3
DATA SEGMENT
STR1 DB 'SKDJFE2232'
COUNT EQU $-STR1
STR2 DB COUNT DUP ()
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STR1
LEA DI,STR2
MOV CX,COUNT
CLD
REP MOVSB
MOV AH,4CH
INT 21H
CODE ENDS
END START
4
data segment
count equ 10
buf db 2,3,5,8,9,10,40,90,4,89
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov si,0
mov cx,count
dec cx
mov al,buf[si]
next:
inc si
cmp al,buf[si]
jna bxy
mov al,buf[si]
bdy:
loop next
mov ah,4ch
int 21h
code ends
end start
assume cs:code ---是你的代码段的开始,完整的程序要有的
data segment ---数据段
buf dw a1,a2,,a20 ;这里不给出具体数据 ,用来存储数据a1到a20
sum dw 0 ---给sum赋值为0
data ends
start:
mov bx,offset buf ---这个是取数组buf的首地址
mov si,0 --指向数组的下标
mov dx,0
mov cx,20 --计数
again:
mov dx,[bx+si] ---取出对应的数据的值
add sum,dx ---把数组的值一次的加到sum之中
add si,2---指向下一个数据
loop again ---cx减1,然后跳到again在一次的循环执行
mov ax,4c00h --结束的跳出的固定的指令,还有一种的。move ah,4ch
int 21h
code ends
end start
;采用起泡排序法,1--从小到大,2--从大到小
;排序子函数采用栈传递参数,调用方式为
;push arrayname
;push arraylen
;push 1 or 2
DATAS SEGMENT
array db 01h,03,11h,1h,40h,88h,50h,22h,22h,33h,44h,77h ;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
lea dx,array;测试子函数
push dx
mov ax,12
push ax
mov ax,2
push ax
call paixu
MOV AH,4CH
INT 21H
paixu proc near
push bp
mov bp,sp
push ax
push bx
push cx
push dx
push si
mov dx,[bp+4]
dec dx
mov cx,[bp+6]
dec cx
mov si,[bp+8]
nextround:cld
mov bx,cx
nextnum:
lodsb
cmp al,[si]
jna next0
or dl,dl;判别升序排序还是降序排序
jnz acscend
xchg al,[si]
xchg al,[si-1]
next0:
or dl,dl;判别升序排序还是降序排序
jz acscend
xchg al,[si]
xchg al,[si-1]
acscend:
dec bx
jnz nextnum
mov si,[bp+8]
loop nextround;下一轮排序
pop si
pop dx
pop cx
pop bx
pop ax
pop bp
ret 6
paixu endp
CODES ENDS
END START
;第2个程序
;定义一个宏
;字符串输出
;串的首地址为ds:buf
strshow macro buf
lea dx,buf
mov ah,9
int 21h
endm
;
DATAS SEGMENT
table1 dw 0,0,0,0,0 ;此处输入数据段代码
table2 dw offset msga,offset msgb,offset msgc,offset msgd,offset msge
msg0 db 0dh,0ah,"level number of students",0dh,0ah,'$'
msga db "A $"
msgb db "B $"
msgc db "C $"
msgd db "D $"
msge db "E $"
msgs db 0dh,0ah,"input the level:$"
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
strshow msgs
input_sum:
mov ah,1;接收键盘输入,并求和
int 21h
cmp al,'A'
jb show_result
cmp al,'E'
ja show_result
sub al,'A'
cbw
shl ax,1
mov si,ax
inc word ptr [si]
jmp input_sum
show_result:
strshow msg0
mov cx,'A'
next:mov bx,cx
sub bx,'A'
shl bx,1
mov si,bx
add bx,offset table2
mov dx,ds:[bx]
mov ah,9
int 21h
mov ax,[si]
call dtoc
inc cx
cmp cx,'E'
jna next
mov ah,1
int 21h
MOV AH,4CH
INT 21H
dtoc:push ax;每个等级的人数转化为字符输出
push bx
push dx
mov dx,'$'
push dx
xor dx,dx
mov bx,10
ascii:
div bx
add dx,30h
push dx
sub dx,dx
or ax,ax
jnz ascii
mov ah,2
result:
pop dx
cmp dx,'$'
je return
int 21h
jmp result
return:
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop bx
pop ax
ret
CODES ENDS
END START
;第四个程序,递归求1-100的和
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov cx,100
push cx
call sum
pop ax
;显示结果
mov dx,'$'
push dx
xor dx,dx
mov bx,10
ascii:
div bx
add dx,30h
push dx
sub dx,dx
or ax,ax
jnz ascii
mov ah,2
result:
pop dx
cmp dx,'$'
je return
int 21h
jmp result
return:
mov dl,0dh
int 21h
mov dl,0ah
int 21h
mov ah,1
int 21h
MOV AH,4CH
INT 21H
sum proc near
push bp
mov bp,sp
push cx
cmp cx,1
jnz net
mov word ptr [bp+4],1
jmp sums
net:dec cx
push cx
call sum
pop bx
add [bp+4],bx
sums:pop cx
pop bp
ret
sum endp
CODES ENDS
END START
我知道:
1)从0200H单元开始有100个数,编一个程序检查这些数,正数保持不变,负数取补后送回,要求程序框图和完整程序及每条指令的解释。
(直接从0398HI单取消,然后进入POUJN脚本,改485这个值就可以了)
2)已知数组A和数组B分别包含50和20个互不相等的带符号数(16位)编程将在A中但不在B中出现的数存入数组C中。要求同上。
(直接把A用C0998H这个值改为20和50之间)
3)在首地址为TABLE的数组中存放着200个16位带符号数,以补码表示,找出最大最小数,出现次数最多数及该数出现的次数,依次存放于以RESULT开始的单元内。要求同上。
(把RESUL用POUJN脚本改成TABLE,然后存取,不能出现2个偶数学,最后把00100这个函数给删除了)
以上就基本是这样了,看不懂没关系,关键是互相学习。
以上就是关于汇编语言编程全部的内容,包括:汇编语言编程、汇编语言 编程、汇编语言编程3等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)