汇编程序

本文介绍8086汇编语言的基本概念,包括寄存器的作用及使用,通过具体案例展示了数据操作、字符串处理等功能,并提供了逆序数组等实用编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、寄存器:

    数据寄存器:
        ax/al:主要用于累加
        bx/bl:常存基址
        cx/cl:用作计数
        dx/dl:存数据
    指针与变址寄存器:
        si:源变址指针寄存器
        di:目的变址
        sp:堆栈指针寄存器
        bp: 基址寄存器
    段寄存器:
        CS:代码段
        DS:数据段
        SS:堆栈段
        ES:附加段
    指令指针寄存器:
        IP

2、案例:

    assume 
      cs:code,ds:data,ss:stack
    data segment
        dw 0123H,
    data ends
    satck segment stack
    dw 0,0,0,0,0,0,0,0
    stack ends
code segment
start:
    mov ax,stack
    mov ss,ax
    mov sp,16   //8个字

    mov ax,data
    mov ds,ax

    mov bx,0

    push ds:[bx]

    mov ax,4c00H
    int 21H
code ends

3、将a 加b段放在c段

assume cs:code

a segment
    db  1,2,3,4,5,6,7,8
a ends

b segment
    db  1,2,3,4,5,6,7,8
b ends

c segment
    db  0,0,0,0,0,0,0,0
c ends

code segment
    start:
        mov cx,8
        mov bx,0

        mov ax,a;   a放到ds
        mov ds,ax

        mov ax,c    ;   c放到es
        mov es,ax
/-------------------------------------
addnum: mov dx,0    

        mov ax,a    ;利用dl将a,b相加
        mov ds,ax
        add dl,ds:[bx]

        mov ax,b
        mov ds,ax
        add dl,ds:[bx]

        mov es:[bx],dl;

        inc bx
        loop addnum
-------------------------------------------
修改
addnum:  mov dx,0
         mov dl,ds:[bx]
         and dl,ds:[bx+16]
         mov es:[bx],dl
         inc bx
         loop addnum
-------------------------------------------/

        mov ax,4c00H
        int 21H
code ends

end start

4、push将a的前8个数据逆序放到b:

assume cs:code

a segment
    dw 1,2,3,4,5,6,7,8
a ends

b segment
    dw  1,2,3,4,5,6,7,8
b ends

stack segment stack
    dw  0,0,0,0,0,0,0,0
    dw  0,0,0,0,0,0,0,0
stack ends

code segment
    start:
        mov ax,stack
        mov ss,ax
        mov sp,32

        mov ax,a
        mov ds,ax
        mov bx,0

        mov cx,8

pushdata: push ds:[bx]
          add bx,2
          loop pushdata

          mov ax,b
          mov es,ax
          mov bx,0

          mov cx,8

popdata:  pop es:[bx]
          add bx,2
          loop popdata

          mov ax,4c00H
          int 21H
code ends

end start

5、and or

A   41H     0100 0001B  ;or0010 0000B=>a
B   42H

a   61H     0110 0001B  ;and1101 1111=>A
b   62H     

例:
assume ss:stack,ds:data,cs:code

data segment
        db 'ABCDEF'
        db 'abcdef'
data ends

stack segment stack
        dw 0,0,0,0,0,0,0,0
        dw 0,0,0,0,0,0,0,0
        dw 0,0,0,0,0,0,0,0
        dw 0,0,0,0,0,0,0,0
stack ends

code segment
start:
        mov ax,data
        mov ds,ax
        mov bx,0

        mov ax,data
        mov es,ax

        mov cx,6
/-----------------------------------
downletter: mov dl,ds:[bx]
            or  dl,00100000B
            mov es:[bx],dl
            inc bx
            loop  downletter

            mov cx,6
            mov bx,6

upletter:   mov dl,ds:[bx]
            and dl,11011111B
            mov es:[bx],dl
            inc bx
            loop upletter

            mov ax,4c00H
            int 21H
------------------------------------
修改
setletter: mov dl,ds:[bx]
           or  dl,00100000B
           mov es:[bx],dl

           mov dl,ds:[bx+6]
           and dl,11011111B
           mov es:[bx+6],dl
           inc bx
           loop setletter
------------------------------------/
code ends
end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值