美文网首页
4.汇编程序

4.汇编程序

作者: 芝麻酱的简书 | 来源:发表于2018-08-01 18:40 被阅读9次
    伪指令

    连接过程:伪指令不会被连接编译


    连接过程

    中断:



    在代码段中存放数据:

    ;伪代码 关联CS寄存器为code
    assume cs:code
    
    ;与code ends一一对应
    code segment
    
            ;在代码段寄存器中存放字型数据
            dw 1122h, 3344h, 5566h
            ;在代码段寄存器中存放10个重复值为0000h的字型数据
            db 10 dup(0)
    
    ;标记程序执行入口,与end start是一一对应的
    start:
    
    mov al, 0h
    ;取CS段寄存器的数据1122h
    mov bx, cs:[0]
    
    
    code ends
    end start
    

    打印hello world:

    assume cs:code ds:data
    ;数据段
    data segment
        ;$表示字符串结束
        db 'hello world$'
    data ends
    
    ;代码段
    code segment
    start:
          ;手动设置关联ds的值,cs不需要手动设置是因为cs有start入口
          mov ax,data
          mov ds,ax
    
         ;打印字符串,需要把ds数据移动到dx中,ds字符串数据从0h开始
          mov dx,0h
          ;执行中断指令 ,9h关联为中断表中的打印字符串程序指令
          mov ah, 9h
          int 21h
    
          ;退出程序
          mov ax,4c00h
          ;执行中断指令
          int 21h
    
    
    code ends
    end start
    

    多段访问:

    ; 提醒开发者每个段的含义
    assume cs:code, ds:data
     
      
    ; ----- 数据段 begin ----- 
    data segment            
        age db 20h
        no dw 30h 
        db 10 dup(6) ; 生成10个连续的6 
        string db 'Hello World!$'  
    data ends  
    ; ----- 数据段 end ----- 
    
    
    ; ----- 代码段 begin ----- 
    code segment  
    start:     
        ; 手动设置ds的值
        mov ax, data
        mov ds, ax
        
        mov ax, no
        mov bl, age
    
        ; 打印
        mov dx, offset string 
        ; offset string代表string的偏移地址   
        mov ah, 9h
        int 21h 
        
        ; 退出
        mov ax, 4c00h
        int 21h    
    code ends
    ; ----- 代码段 end -----    
       
       
    ; 编译结束,start是程序入口
    ; start所在的段就是代码段
    ; 所以cs的值就是code段的段地址
    ; 相当于cs的值已经自动设置完毕
    end start
    

    栈使用:

    assume cs:code, ds:data, ss:stack
    
    ; 栈段
    stack segment   
        db 10 dup(8)
    stack ends 
    
    ; 数据段
    data segment   
        db 20 dup(9)
    data ends 
    
    ; 代码段
    code segment
    start: 
        ; 手动设置ss和ds
        mov ax, stack
        mov ss, ax   
        mov ax, data
        mov ds, ax
    
        mov ax, 1122h
        mov bx, 3344h  
        
        mov [0], ax
        
        ; 使用栈
        mov sp, 10 
        push ax
        push bx
        pop ax
        pop bx
        
        
        ; 退出
        mov ax, 4c00h
        int 21h   
    code ends
    
    end start
    

    相关文章

      网友评论

          本文标题:4.汇编程序

          本文链接:https://www.haomeiwen.com/subject/powrvftx.html