几道汇编入门题目

博客给出了一个解决方案的转载链接,链接为https://www.cnblogs.com/wushuaiyi/p/4526096.html 。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用汇编语言编写一个程序,找出在数据段中预先定义的一组带符号数中的最大数和最小数,并将它们的序号显示到屏幕上(假设序号从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 

 

转载于:https://www.cnblogs.com/wushuaiyi/p/4526096.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值