zoukankan      html  css  js  c++  java
  • 几道汇编入门题目

    用汇编语言编写一个程序,找出在数据段中预先定义的一组带符号数中的最大数和最小数,并将它们的序号显示到屏幕上(假设序号从0开始)。
    例如一组数据定义为: 0A5H,32H,73H, 08H,0FH,90H,0DAH,3BH 
    则显示结果为:Max:2  Min:5
    

      

    my solution:

     1 data segment 
     2     str1 db 'Max :   ', '$'
     3     str2 db 'Min :   ', '$'
     4     num db 0A5H, 32H, 73H, 08H, 0FH, 90H, 0DAH, 3BH
     5     res1  db 30h ,'$'
     6     res2  db 30h ,'$'
     7     max db 00h
     8     min db 00h
     9 ends
    10 
    11 stack segment
    12     dw 128 dup (0)
    13 ends
    14 
    15 code segment
    16     assume cs:code, ds:data, ss:stack
    17 start:
    18     mov ax, data
    19     mov ds, ax
    20     mov es, ax
    21     
    22     mov cx, 07h
    23     lea bx, num
    24     mov si, 00h
    25     mov dl, 00h
    26     mov dh, 00h
    27     mov al, ds:[bx + si]
    28     mov max, al            ;初始化alah为num中第一个元素
    29     mov min, al
    30     mov ah, 01h           ;下标flag
    31     inc si
    32 
    33 next:
    34     mov al, ds:[bx + si]
    35     cmp max, al
    36     jg j1
    37     cmp min, al
    38     jl j2
    39     jmp j3
    40 
    41 j1:
    42     mov max, al
    43     mov dh, ah
    44     jmp j3
    45 
    46 j2:
    47     mov min, al
    48     mov dl, ah
    49     jmp j3
    50 
    51 j3:
    52     inc si
    53     inc ah
    54     loop next
    55 
    56 done:
    57     add res1, dl
    58     add res2, dh
    59 
    60     mov ah, 09h
    61     lea dx, str1
    62     int 21h
    63     lea dx, res1
    64     mov ah, 9
    65     int 21h    
    66 
    67     mov ah, 09h
    68     lea dx, str2
    69     int 21h
    70     lea dx, res2
    71     mov ah, 9
    72     int 21h    
    73 
    74     mov ax, 4c00h
    75     int 21h
    76 end
    77 end start

    用汇编语言编写一个程序,以统计数据段中预先定义的一组数据中正数,负数和零的个数,并且将结果显示到屏幕上。
    例如一组数据定义为: 34H,-3BH,-5AH,72H,0,-2DH,0,66H 
    则显示结果为:Positive:3  Negative:3  Zero:2
    

      my solution :

     1 data segment
     2     str db 'Hello, World!', 0Dh, 0Ah, '$'
     3     pkey db "press any key...$"
     4     posi db "Positive: $"
     5     nega db "Negative: $"
     6     zero db "Zero: $"
     7     num db 34H, -3BH, -5AH, 72H, 0, -2DH, 0, 66H
     8     zeronum db 00h
     9     posinum db 00h
    10     neganum db 00h
    11 ends
    12 
    13 stack segment
    14     dw   128  dup(0)
    15 ends
    16 
    17 code segment
    18 start:
    19     assume cs:code, ds:data, ss:stack
    20     mov ax, data
    21     mov ds, ax
    22     mov es, ax
    23 
    24     lea bx, num
    25     mov cx, 8
    26     jcxz done   ;如果cx为0则结束循环
    27 
    28 again:
    29     mov al, ds:[bx] ;bx为num首地址,为基址变址寻址方式
    30     inc bx
    31     cmp al, 0
    32     jg above        ;如果比较结果大于0,则为正数
    33     jz zer          ;如果比较结果等于0,则为0
    34     inc neganum     ;否则对neganum累加
    35     loop again
    36 
    37 zer:
    38     inc zeronum
    39     loop again
    40 
    41 above:
    42     inc posinum
    43     loop again
    44 
    45 done:   
    46     mov ah, 09h
    47     lea dx, posi
    48     int 21H
    49     mov ah, 02h
    50     mov dl, posinum
    51     add dl, 30h     ;加上0的ASCLL 码
    52     int 21H
    53 
    54     mov ah, 09h
    55     lea dx, nega
    56     int 21H
    57     mov ah, 02h
    58     mov dl, neganum
    59     add dl, 30h
    60     int 21H
    61 
    62     mov ah, 09h
    63     lea dx, zero
    64     int 21H
    65     mov ah, 02h
    66     mov dl, zeronum
    67     add dl, 30h
    68     int 21H
    69     
    70     mov ax, 4c00h 
    71     int 21h    
    72 ends
    73 
    74 end start 

    3 用汇编语言编写一个程序,统计数据段中预先定义的某十六位数中"1" 的个数,并在屏幕上显示相关信息。
    例如数据定义为:532EH 
    则显示结果为:0101001100101110:8
    

      

     1 data segment
     2     pkey db "press any key...$"
     3     num dw 532Eh
     4     dig db 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, 30h, ":", '$' ;初始化数组,表示16个0
     5     ans db 30h,'$' ;存放有几个1
     6 ends
     7 
     8 stack segment
     9     dw   128  dup(0)
    10 ends
    11 
    12 code segment
    13 start:
    14     mov ax, data
    15     mov ds, ax
    16     mov es, ax
    17 
    18     mov cx, 0Fh  
    19     mov si, 0Fh ;十六位数
    20     mov ax, num
    21 
    22 again:
    23     mov bx, ax
    24     and bx, 01h
    25     cmp bx, 00h
    26     jz eq
    27     add ans, 01h
    28     add dig[si], 01h
    29 
    30 eq:
    31     sar ax, 1   ;右移一位
    32     dec si
    33     loop again
    34               
    35     add ans, dl
    36     lea dx, dig
    37     mov ah, 9
    38     int 21h   
    39     
    40     lea dx, ans
    41     mov ah, 9
    42     int 21h  
    43             
    44     mov ax, 4c00h 
    45     int 21h    
    46 ends
    47 
    48 end start 
  • 相关阅读:
    vim设置字体
    mplayer error opening/initializing the selected video_out (vo) device
    ubuntn MySQL安装指南
    man linux
    ubuntu中无法启用桌面效果(3D效果)几种解决方案
    man c 函数 安装 使用
    Ubuntu使用桌面小工具
    Josephus 排列问题
    Adding the PPA to Ubuntu
    Ubuntu的root密码是什么
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4526096.html
Copyright © 2011-2022 走看看