欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微机原理实验,8086汇编

程序员文章站 2024-02-02 15:42:22
...

description

编写一个简单的程序:将“This is my first ASM program-姓名(汉语拼音各人的姓名)”放在DS=1000H,BX=0000H开始的存储器单元中,然后将该内容搬移到BX=0100H开始的单元中,最后将该字符串通过DOS功能调用显示在屏幕上。

EXE版本


; 声明数据段
data segment
    msg db "this is first asm program-ya*******ao$"
    db 1000 DUP(0)     ; 未初始化数据
ends

; 声明栈段
stack segment
    dw   128  dup(0)
ends

; 声明代码段
code segment
start:
    mov ax, data        ; 将数据段的首地址mov到ds寄存器,需要注意的是不能直接mov ds, data,必须需要通过ax寄存器间接赋值,这个是汇编的知识。
    mov ds, ax 
    mov ax, 1000h
    mov es, ax    ; 同时将数据段首地址mov到es(extended segment)
    
    mov si, 0
    mov di, 0
    mov cx, 40          ; 40为字符串msg的长度
    
copy1:                     ; 数据从ds复制到1000:0000
    mov ax, [si]
    mov es:[di], ax    ; si和di在没有显式标明段时默认是ds段,这里es:[di]是1000:0000
    add si, 2
    add di, 2
    loop copy1
        
    mov si, 0    
    mov di, 0100h         
    mov cx, 40
    
copy2:                        ; 将数据复制到1000:0100
    mov ax, [si]
    mov es:[di], ax       ; es:[di]为1000:0100
    add si, 2
    add di, 2
    loop copy2

	mov ax, 1000h
    mov ds, ax            ; 按照题目ds为1000
      
    lea dx, msg             ; lea(load effective address,加载有效地址), 将msg的地址存到dx寄存器中,等效于mov dx, offset msg
    mov ah, 9
    int 21h        ; int 21中断,output string at ds:dx
    
    ; wait for any key....    
    mov ah, 1
    int 21h
    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

com版本


org 100h

; add your code here 

mov ax, 1000h
mov dx, ax
mov bx, 0000h

mov [02h], 'T'
mov [04h], 'h'
mov [08h], 'i'
mov [0ah], 's'
mov [0ch], ' '
mov [0eh], 'i'
mov [10h], 's'
mov [12h], ' '
mov [14h], 'm'
mov [16h], 'y'
mov [18h], ' '
mov [1ah], 'f'
mov [1ch], 'i'
mov [1eh], 'r'
mov [20h], 's'
mov [22h], 't'
mov [24h], ' '
mov [26h], 'A'
mov [28h], 'S'
mov [2ah], 'M'
mov [2ch], ' '
mov [2eh], 'p'
mov [30h], 'r'
mov [32h], 'o'
mov [34h], 'g'
mov [36h], 'r'
mov [38h], 'a'
mov [3ah], 'm'
mov [3ch], '-'
mov [3eh], 'y'
mov [40h], 'a'
mov [42h], 'n'
mov [44h], 'g'
mov [46h], 's'
mov [48h], 'h'
mov [4ah], 'i'
mov [4ch], 'z'
mov [4eh], 'h'
mov [50h], 'a'
mov [52h], 'o'

mov cx, 40 
mov bx, 0002h

start:
    mov ax, [bx]
    mov [bx+0100h], ax
    add bx, 2
loop start

mov bx, 0102h
mov cx, 40

print:
    mov dl, [bx]
    mov ah, 02h
    int 21h
    add bx, 2
loop print

mov ah, 4ch
int 21h

ret