zoukankan      html  css  js  c++  java
  • 转移指令实验

    实验八

    验证程序能否正常返回

    assume cs:code
    code segment
        mov ax,4c00h
        int 21h
    start: mov ax,0          ; ip=0005,程序入口点,
        s: nop                ; ip:0008
            nop
            
            mov di,offset s    ; di=0008
            mov si,offset s2   ; si=0020
            mov ax,cs:[si]     ; ax=[0020]=EBF6
            mov cs:[di],ax     ; [0008]=EBF6
            
        s0:jmp short s
        
        s1:mov ax,0
            int 21h
            mov ax,0
            
        s2:jmp short s1       ;ip:0020   机器码EBF6,F6为-10的补码
            nop
    
    code ends
    end start

    程序运行到ip为0014时,将ip为0008,0009的nop指令改为机器码EBF6,接着jmp到0008处

    此时0008处指令EBF6为跳转到前10个内存单元,先进行指令下移ip+2,当前ip为8+2,在进行跳转指令,跳转到内存空间为0处执行指令:

    mov ax,4c00h
    int 21h

    此时程序正常退出。

    实验九

    在屏幕中间用3种颜色属性打印三行welcome to masm!

    ;80*25的意思: 25行,每行80个字符
    assume cs:code
    data segment
        db 'welcome to masm!'
        db 02h,24h,71h       ; 要求的三个颜色对应的16进制代码
    data ends
    
    stack segment
        db 16 dup (0)        ; 定义16字节的栈段
    stack ends
    code segment
    
    start:
        mov ax,0b800h
        mov es,ax            ; 定义显示缓冲区段
        
        mov ax,stack         
        mov ss,ax            ; 定义栈段(存储临时变量)
        
        mov ax,data
        mov ds,ax            ; 定义数据段
                     
        mov bx,780h          ; 780/160=12行(打印的位置)
        
    
        mov di,10h           ; di为颜色的偏移
        mov cx,3             ; 打印3行
        mov sp,10h                ; 初始栈
        
    s: push cx
        mov ss:[10h],0
        mov bp,0             ; bp为字符串的偏移地址
        mov ah,[di]          ; 高8位存颜色
        mov si,0             ; si为显示缓冲区的偏移
        mov cx,16
       s1:
            mov al,ds:[bp]          ; 低8位存字符
            mov es:[bx+si+64],ax ; 显示缓冲区赋值
            add bp,1             ; 字符串转到下一个字符
            add si,2             ; 缓冲区移到下一个字符
            loop s1
        pop cx
        inc di                  ; 切换下一个颜色
        add bx,0a0h             ; 切换到下一行
        loop s
    
        mov ax,4c00h
        int 21h
    code ends
    end start

    需要在DOS界面才能打印

     

  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/luocodes/p/11942599.html
Copyright © 2011-2022 走看看