zoukankan      html  css  js  c++  java
  • Assembly Experiment9

    用英文写太浪费时间了,而且书上的讲解对各种功能的英文原句少之又少,有空还是看龙书吧(不存在的)

    实验1: 十六进制转换十进制

    实验代码:

    1.  ; 在屏幕上输出内存单元中的十进制两位数
    2. assume cs:code, ds:data
    3. data segment
    4.      db 12
    5.      db 1,2   ; 前一个字节用于保存商,后一个字节用于保存余数
    6. data ends
    7. code segment
    8. start:
    9.       mov ax,data
    10.       mov ds,ax       ; 补全指令,使得ds <-- data段地址
    11.       
    12.       mov ah,0
    13.       mov al,ds:[0]   ; ax <-- data段字节单元的被除数12
    14.       mov bl,10
    15.       div bl
    16.       mov  ds:[1],al    ; 补全代码,让商保存到data段注释中指定的单元
    17.       mov  ds:[2],ah    ; 补全代码,让余数保存到data段注释中指定的单元
    18.       mov ah,2
    19.       mov dl,ds:[1]    ; 补全代码,使得dl <-- data段中保存的商的字节单元数值
    20.       add dl,30h      ; 补全代码,使得dl中的数值转换为数字字符
    21.       int 21h
    22.       mov ah,2
    23.       mov dl,ds:[2]     ; 补全代码,使得dl <-- data段中保存余数的字节单元数值
    24.       add dl,30h       ; 补全代码,使得dl中的数值转换为数字字符      
    25.       int 21h
    26.       mov ax,4c00h
    27.       int 21h
    28. code ends
    29. end start

     实验截图:

    实验结果:

    实验2:实验1升级版,要求将一串十六进制数转化为十进制数

    1. assume cs:code, ds:data
    2. data segment
    3.      db 12,35,96,55,67
    4. data ends
    5. code segment
    6. start:
    7.       ; 补全程序,参考t1.asm,综合应用以下知识完成:
    8.       ; (1) loop指令、内存单元地址的灵活表示
    9.       ; (2) div指令, 数字→数字字符的转换
    10.       ; (3) int 21h的2号子功能,完成单个字符输出的方法,即:
    11.       ;     mov ah,2
    12.       ;     mov dl,待输出字符或其ASCⅡ码
    13.       ;     int 21h
    14.       ; (4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符
    15.       mov ax,data
    16.       mov ds,ax
    17.       mov si,0
    18.       mov cx,5
    19. s:    mov ah,0
    20.       mov al,ds:[si] ; ax <-- data段字节单元的被除数12
    21.       mov bl,10
    22.       div bl
    23.       mov dl,al
    24.       mov dh,ah
    25.       mov ah,2       
    26.       add dl,30h
    27.       int 21h
    28.       add dh,30h
    29.       mov ah,2
    30.       mov dl,dh
    31.       int 21h  
    32.  
    33.       mov ah,2  
    34.       mov dl,' '
    35.       int 21h
    36.       inc si
    37.       loop s
    38.       mov ax,4c00h
    39.       int 21h
    40. code ends
    41. end start

    实验截图:

    实验结果:

    这里还是比较简单的,利用寄存器si每次加上1来进行转换到下一个十六进制数,利用一个循环就能解决问题,不过也可以利用栈的方法解决

    实验3:书上实验9 根据材料编程

    编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串  'welcome to masm!'

    实验代码:

    1. assume ds:data, cs:code
    2. data segment
    3.        db 'welcome to masm!'  
    4.        db 2H,24H,71H  
    5. data ends
    1. code segment
    2. start:  mov ax,data
    3.         mov ds,ax            ;字符串及属性值所在段的段地址送入ds
    4.         mov ax,0b800H
    5.         mov es,ax            ;80×25彩色字符模式显示缓冲区段地址送入es
    1.         mov bx,0   ; bx为ds的偏移地址
    2.         mov si,0  ;si为es的偏移地址
    3.         mov cx,16 ;循环16次
    4. s1:    mov al,ds:[bx]   
    5.         mov ah,ds:[10h]  ;第一种 2H
    6.         mov word ptr es:[si],ax
    7.         mov ah,ds:[11h]  ;第二种 24H
    8.         mov word ptr es:[si+80],ax
    9.         mov ah,ds:[12h]  ;第三种 71H
    10.         mov word ptr es:[si+160],ax
    11.         inc bx
    12.         add si,2
    13. loop s1
    1.         mov ax,4c00h
    2.         int 21h
    3. code ends
    4. end start

    实验结果:

    然而??? 内存不够了吗。。。

      ??????

    请孙锐同学帮一手

    实验总结:
    这次实验我们学习了:

  • 相关阅读:
    window.open打开新窗体并用post方式传参
    开发环境搭建问题及解决
    JavaScript高级程序设计(二)
    JavaScript高级程序设计(一)
    JS 小技巧整理
    Windows7版本了解
    安装mysql8.0.17时候报错1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client
    idea中gradle的springboot的项目热部署
    idea多行注释缩进
    idea的类头注释和方法注释的编辑
  • 原文地址:https://www.cnblogs.com/mrorangerabbit/p/10092420.html
Copyright © 2011-2022 走看看