汇编语言编程

汇编语言编程,第1张

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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9341213.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存