zoukankan      html  css  js  c++  java
  • 汇编语言程序设计实验二 (顺序、多分支、循环)

    实验二  汇编语言程序设计(顺序、多分支、循环)

    一. 实验目的

      1、掌握顺序和循环程序结构和设计方法;

      2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

    二. 实验内容

      1XYZV均为字变量,在XYZV字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:

      ①计算表达式值(V–(X*Y+Z-720))/X

      ②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

      2、使用地址表实现如下功能:根据输入的数字17,分别显示相应的英文星期名,如果输入其他字符,则重新输入。

      3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。

      4、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串;查找中间是否有‘masm’子串。如果有,输出‘Yes’;否则,输出‘No) 

    三. 实验过程和程序

      1 ;the source code of the Exp 2.1
      2 stack   segment stack
      3         db 512 dup(?)
      4 stack   ends
      5 
      6 data    segment
      7         inputX db "input x:",0ah,0dh,'$'
      8         inputY db "input y:",0ah,0dh,'$'
      9         inputZ db "input z:",0ah,0dh,'$'
     10         inputV db "input v:",0ah,0dh,'$'
     11     
     12         x dw 0
     13         y dw 0
     14         z dw 0
     15         v dw 0
     16         sum1 dw 0
     17         sum2 dw 0
     18     
     19         input db 8
     20         db 1 dup(?)
     21         db 8 dup(?)
     22         sign db 0
     23         outputSum1 db "sum1:",0ah,0dh,'$'
     24         outputSum2 db "sum2:",0ah,0dh,'$'
     25 data    ends
     26 
     27 code    segment 'code'
     28         assume cs: code, ds: data, ss: stack
     29 start:
     30         mov ax, data
     31         mov ds, ax
     32         mov ax, stack
     33         mov ss, ax
     34     
     35         mov ah, 09h
     36         lea dx, inputX
     37         int 21h
     38         call readInt
     39         mov word ptr [x], ax
     40     
     41         mov ah, 09h
     42         lea dx, inputY
     43         int 21h
     44         call readInt
     45         mov word ptr [y], ax
     46     
     47         mov ah, 09h
     48         lea dx, inputZ
     49         int 21h
     50         call readInt
     51         mov word ptr [z], ax
     52     
     53         mov ah, 09h
     54         lea dx, inputV
     55         int 21h
     56         call readInt
     57         mov word ptr [v], ax
     58     
     59         mov ax, [x]
     60         mov bx, [y]
     61         imul bx         ; x*y
     62         add ax, [z]     ; x*y+z
     63         sub ax, 720     ; x*y+z-720
     64         mov bx, [v]
     65         sub bx, ax      ; v-(x*y+z-720)
     66         mov ax, bx      
     67         cwd
     68         mov bx, [x]     
     69         idiv bx          ; (v-(x*y+z-720))/x
     70         mov [sum1], ax
     71         mov [sum2], dx
     72     
     73         lea dx, outputSum1
     74         mov ah, 09h
     75         int 21h
     76     
     77         mov ax, [sum1]
     78         call prinIint
     79     
     80         mov dl, 0ah
     81         mov ah, 02h
     82         int 21h
     83     
     84         mov dl, 0dh
     85         mov ah, 02h
     86         int 21h
     87     
     88         lea dx, outputSum2
     89         mov ah, 09h
     90         int 21h
     91     
     92         mov ax, [sum2]
     93         call prinIint
     94     
     95         mov ah, 4ch
     96         int 21h
     97 readInt:
     98         pushf
     99         push bx
    100         push cx
    101         push dx
    102         push si
    103     
    104         lea dx, input
    105         mov ah, 0ah
    106         int 21h
    107     
    108         mov dl, 0ah
    109         mov ah, 02h
    110         int 21h
    111     
    112         mov dl, 0dh
    113         mov ah, 02h
    114         int 21h
    115     
    116         mov ax, 0
    117         xor cx, cx
    118         mov cl, [input+1]
    119         lea si, [input+2]
    120         mov byte ptr [sign], 0
    121         cmp byte ptr[si], '-'
    122         jnz next1
    123         inc si
    124         dec cx
    125         mov byte ptr [sign], 1
    126 next1:
    127         mov ax, 0
    128 loop1:
    129         mov bx, 10
    130         mul bx
    131         xor bx, bx
    132         mov bl, [si]
    133         sub bl, '0'
    134         add ax, bx
    135         inc si
    136         loop loop1
    137     
    138         cmp byte ptr [sign], 1
    139         jnz next2
    140         xor bx, bx
    141         sub bx, ax
    142         mov ax, bx
    143     
    144 next2:
    145         pop si
    146         pop dx
    147         pop cx
    148         pop bx
    149         popf
    150         ret
    151 prinIint:
    152         pushf
    153         push bx
    154         push cx
    155         push dx
    156         push si
    157     
    158         mov si, ax
    159         cmp ax, 0
    160         jge skip2
    161         mov dl, '-'
    162         mov ah, 02h
    163         int 21h
    164         mov ax, 0
    165         sub ax, si
    166 skip2:
    167         cmp ax, 0
    168         jne skip1
    169         push ax
    170         mov cx, 1
    171         jmp next3_end
    172 skip1:
    173         mov cx, 0
    174 next3:
    175         cmp ax, 0
    176         je next3_end
    177         mov dl, 10
    178         div dl
    179         xor bx, bx
    180         mov bl,ah
    181         push bx
    182         mov ah, 0
    183         inc cx
    184         jmp next3
    185     
    186 next3_end:
    187         xor dx, dx
    188         pop dx
    189         add dl, 48
    190         mov ah, 02h
    191         int 21h
    192         loop next3_end
    193         pop si
    194         pop dx
    195         pop cx
    196         pop bx
    197         popf
    198         ret
    199     
    200 code ends
    201         end start
     1 ;the source code of the Exp 2.2
     2 stack   segment stack
     3         db 512 dup(?)
     4 stack   ends
     5 
     6 data    segment
     7         address dw l1, l2, l3, l4, l5, l6, l7
     8         s1 db 'Monday $'
     9         s2 db 'Tuesday $'
    10         s3 db 'Wednesday $'
    11         s4 db 'Thursday$'
    12         s5 db 'Friday$'
    13         s6 db 'Startday$'
    14         s7 db 'Sunday$'
    15         input db 'Please input a number between 1 to 7:',0ah,0dh,'$'
    16 data    ends
    17         
    18 code    segment 'code'
    19         assume cs: code, ds: data, ss: stack
    20 start:  
    21         mov ax, data
    22         mov ds, ax
    23         mov ax, stack
    24         mov ss, ax
    25 start1: 
    26         lea dx, input
    27         mov ah, 09h
    28         int 21h
    29     
    30         mov ah, 01h
    31         int 21h
    32     
    33         mov bl, al
    34     
    35         mov dl, 0ah
    36         mov ah, 02h
    37         int 21h
    38     
    39         mov dl, 0dh
    40         mov ah, 02h
    41         int 21h
    42     
    43         mov al, bl
    44         sub al, '0'
    45         cmp al, 1
    46     
    47     
    48         jb start1
    49         cmp al,7
    50         ja start1
    51     
    52         dec al
    53         mov ah, 0
    54         mov bx,ax
    55         shl bx, 1
    56         jmp address[bx]
    57 
    58 l1:
    59         lea dx,s1
    60         jmp s
    61 l2:
    62         lea dx, s2
    63         jmp s
    64 l3:
    65         lea dx, s3    
    66         jmp s
    67 l4:
    68         lea dx, s4
    69         jmp s
    70 l5:
    71         lea dx, s5
    72         jmp s
    73 l6:
    74         lea dx, s6
    75         jmp s
    76 l7:
    77         lea dx, s7
    78 s:
    79         mov ah, 09h
    80         int 21h
    81     
    82         mov dl, 0ah
    83         mov ah, 02h
    84         int 21h
    85     
    86         mov dl, 0dh
    87         mov ah, 02h
    88         int 21h
    89    
    90         mov ah, 4ch
    91         int 21h
    92 
    93 code ends
    94         end start
      1 ;the source code of the Exp 2.3
      2 stack   segment stack
      3         db 512 dup(?)
      4 stack   ends
      5 
      6 data    segment
      7         inputMSG db "input:", 0ah, 0dh, '$'
      8         max dw 0
      9         min dw 100
     10         average dw 0
     11         input db 8
     12         db 1 dup(?)
     13         db 8 dup(?)
     14         sign db 0
     15         output1 db "average:", 0ah, 0dh, '$'
     16         output2 db "max:", 0ah, 0dh, '$'
     17         output3 db "min:", 0ah, 0dh, '$'
     18 data    ends
     19 
     20 code    segment 'code'
     21         assume cs: code, ds: data, ss: stack
     22 start:
     23         mov ax, data
     24         mov ds, ax
     25     
     26         mov cx, 50
     27 L1:
     28         lea dx, inputMSG
     29         mov ah, 09h
     30         int 21h
     31         call readInt
     32         cmp ax, [max]
     33         jg max1
     34         jmp skip11
     35 max1:
     36         mov [max], ax
     37 skip11:
     38         cmp [min], ax
     39         jg min1
     40         jmp skip22
     41 min1:
     42         mov [min], ax
     43 skip22:
     44         add [average], ax
     45         loop L1
     46     
     47         mov ax, [average]
     48         cwd
     49         mov bx, 50
     50         idiv bx
     51         mov [average], ax
     52     
     53         lea dx, output1
     54         mov ah, 09h
     55         int 21h
     56     
     57         mov ax, [average]
     58         call printInt
     59     
     60         mov dl, 0ah
     61         mov ah, 02h
     62         int 21h
     63     
     64         mov dl, 0dh
     65         mov ah, 02h
     66         int 21h
     67     
     68         lea dx, output2
     69         mov ah, 09h
     70         int 21h
     71     
     72         mov ax, [max]
     73         call printInt
     74     
     75         mov dl, 0ah
     76         mov ah, 02h
     77         int 21h
     78     
     79         mov dl, 0dh
     80         mov ah, 02h
     81         int 21h
     82     
     83         lea dx, output3
     84         mov ah, 09h
     85         int 21h
     86     
     87         mov ax, [min]
     88         call printInt
     89     
     90         mov ah, 4ch
     91         int 21h
     92 readInt:
     93         pushf
     94         push bx
     95         push cx
     96         push dx
     97         push si
     98     
     99         lea dx, input
    100         mov ah, 0ah
    101         int 21h
    102     
    103         mov dl, 0ah
    104         mov ah, 02h
    105         int 21h
    106     
    107         mov dl, 0dh
    108         mov ah, 02h
    109         int 21h
    110     
    111         mov ax, 0
    112         xor cx, cx
    113         mov cl, [input+1]
    114         lea si, [input+2]
    115         mov byte ptr [sign], 0
    116         cmp byte ptr[si], '-'
    117         jnz next1
    118         inc si
    119         dec cx
    120         mov byte ptr [sign], 1
    121 next1:
    122         mov ax, 0
    123 loop1:
    124         mov bx, 10
    125         mul bx
    126         xor bx, bx
    127         mov bl, [si]
    128         sub bl, '0'
    129         add ax, bx
    130         inc si
    131         loop loop1
    132     
    133         cmp byte ptr [sign], 1
    134         jnz next2
    135         xor bx, bx
    136         sub bx, ax
    137         mov ax, bx
    138     
    139 next2:
    140         pop si
    141         pop dx
    142         pop cx
    143         pop bx
    144         popf
    145         ret
    146     
    147 printInt:
    148         pushf
    149         push bx
    150         push cx
    151         push dx
    152         push si
    153     
    154         mov si, ax
    155         cmp ax, 0
    156         jge skip2
    157         mov dl, '-'
    158         mov ah, 02h
    159         int 21h
    160         mov ax, 0
    161         sub ax, si
    162 skip2:
    163         cmp ax, 0
    164         jne skip1
    165         push ax
    166         mov cx, 1
    167         jmp next3_end
    168 skip1:
    169         mov cx, 0
    170 next3:
    171         cmp ax, 0
    172         je next3_end
    173         mov dl, 10
    174         div dl
    175         xor bx, bx
    176         mov bl,ah
    177         push bx
    178         mov ah, 0
    179         inc cx
    180         jmp next3
    181     
    182 next3_end:
    183         xor dx, dx
    184         pop dx
    185         add dl, 48
    186         mov ah, 02h
    187         int 21h
    188         loop next3_end
    189         pop si
    190         pop dx
    191         pop cx
    192         pop bx
    193         popf
    194         ret
    195     
    196 code ends
    197         end start
     1 ;the source code of the Exp 2.4
     2 stack   segment stack
     3         db 512 dup(?)
     4 stack   ends
     5 
     6 data    segment
     7         data2 db 50, ?, 50 dup('$')
     8         string db 'yes', 0ah, 0dh, '$'
     9         string1 db 'no', 0ah, 0dh, '$'
    10 data    ends
    11 
    12 
    13 code segment 
    14         assume cs: code, ds: data, ss: stack
    15 start: 
    16         mov ax, data
    17         mov ds, ax
    18         mov ax, stack
    19         mov ss, ax
    20     
    21         mov ah, 0ah
    22         mov dx, offset data2
    23         int 21h
    24     
    25         mov ah, 02h
    26         mov dl, 0ah
    27         int 21h
    28     
    29         mov ah, 02h
    30         mov dl, 0dh
    31         int 21h    
    32     
    33 
    34         mov dx, offset data2+2
    35         mov ah, 09h
    36         int 21h
    37     
    38         mov ah, 02h
    39         mov dl, 0ah
    40         int 21h
    41     
    42         mov ah, 02h
    43         mov dl, 0dh
    44         int 21h    
    45     
    46         mov al, 0h
    47         mov cx, 47
    48         mov di, 0
    49 again: 
    50         mov al, [ di + 2 ]
    51         cmp al, 61h
    52         jnz next
    53         mov al, [ di + 3] 
    54         cmp al, 73h
    55         jnz next
    56         mov al, [ di + 4 ]
    57         cmp al, 6dh
    58         jnz next
    59         jmp yes
    60 
    61     
    62 next: 
    63         add di, 1
    64         loop again
    65         mov dx, offset string1
    66         mov ah, 09h
    67         int 21h
    68         jmp endcode
    69 yes:        
    70         mov dx, offset string
    71         mov ah, 09h
    72         int 21h
    73 endcode:   
    74         mov ax, 4c00h
    75         int 21h
    76        
    77 code ends
    78         end start

    四. 实验结果(包括必要的截图)

     

     

    图 2.1运行截图

     

    图 2.1运行截图

     

    图 2.2运行截图

    图 2.2运行截图

     

    图 2.3运行截图

     

    图 2.3运行截图

     

     

    图 2.4运行截图

     

    图 2.4运行截图

     

      四.实验体会

      汇编太难了,这四个题目如果不查资料一个都弄不出来。上课听得很过瘾,下课啥也不会做。

     

      注:模仿是最深的爱慕

  • 相关阅读:
    HTTP响应状态码
    跨域
    第一章-极限与函数
    离群点检测
    关联规则(初识)
    python分类预测模型的特点
    分类预测算法评价(初识)
    人工神经网络(初识)
    决策树(初识)
    挖掘建模
  • 原文地址:https://www.cnblogs.com/25th-engineer/p/10809693.html
Copyright © 2011-2022 走看看