5个小例子快速入门汇编(包括软件下载)

这学期结束了汇编的学习,光看书听老师讲是没有太大提高的。这里整理了一些代码,提供参考,也是我对汇编学习的总结。
软件下载(百度盘):https://pan.baidu.com/s/1RTCBPFrJjSsuUKsI2ku-Gg
提取码:9876

data segment 
    str DB 'Hello world!','$' ;调用ah的9号功能将dx中的内容输出,以‘$’结束
    data ends
code segment 
    assume cs:code,ds:data
    run:
    		;输出hello world!
            mov ax,data
            mov ds,ax			;初始化ds段
            mov dx,offset str
            mov ah,09h     ;调用9号功能
            int 21h 
            mov ah,4ch
            int 21h
        
            code ends
end run
data segment 
    str DB '1234567891' ;统计'1'的个数
    num DB 0		    ;num用来记录有几个‘1’
    data ends
code segment 
    assume cs:code,ds:data
    run:
            mov ax,data
            mov ds,ax
            mov cx,offset num-offset str ;用num的偏移地址减去str的偏移地址,以此来确定应该循环多少次
            ;shr cx,1
            lea si,str  ;取str的偏移地址
            s:	;每以此执行完loop语句,cx的值自减1,由程序自己决定
            mov al,[si]	 ;将si指向的偏移地址的内容传送到al中
            mov bl,al
            sub al,49   ;ax = ax - 49,因为‘1’对应的ASCII码是49,这里通过ASCII码来判断它是否为‘1’
            cmp al,0    ;和零作比较
            jne  next   ;不等时,执行该语句后inc num是不会被执行的,所以以此方式来统计‘1’的个数
            inc num     ;否则num自加一次
            next:
                  inc si  
            loop s
            hlt
            code ends
end run
data segment 'data'
    s DW 10
    x DW 2
    y DW 1
    z DW 19        
    data ends

code segment 'code'
    assume cs:code
    run:
    		;计算这个式子(s-(x*y+z))/x
            mov ax,data
            mov ds,ax
            
            mov ax,x
            mul y       ;ax = x * y
            mov bx,z
            add ax,bx   ; ax = bx + ax
            mov bx,s
            sub bx,ax   ;bx = bx - ax
            
            cmp bx,0    ;0作比较
            jge next    ;如果大于等于0则跳转到next
            neg bx      ;否则求补
            
            
           next: 
            mov ax,bx
            div x       ;al = ax / x(取整)   dx = ax % x(取余)

            hlt
            code ends
end run
;DB (Declare Byte) 用于声明字节数据(8)
;DW(Declare Word)用于声明字数据(16)
;DD(Declare Double Word)用于声明双字(两个字)数据,
;DQ(Declare Quad Word)用于声明四字数据。data segment 'data' 
    sum db 0    
    data ends

code segment 'code'
    assume cs:code,ds:data
    run:    
    		;计算5的阶乘
    	    mov ax,data
    	    mov ds,ax
    	    mov cx,5     
    	    mov ax,1
    	    s:
    	          mul cx  ;al = al * cx
    	    loop s
           hlt		;结果结果存放在ax中
            code ends
end run
data segment 
    table DB 48,52,50,57,49,255,154,223,55,53
    max DB 0		
    data ends  

code segment 
    assume cs:code,ds:data
    run:			;寻找最大值
           mov ax,data
           mov ds,ax
           
           mov cx,10		;准备循环10次
           mov ax,0000h
           mov bx,0000h         ;bx初始化为0
           mov si,offset table 
           s:  
              mov al,[si]       ;读取一个table中的数据
              cmp bl,al         ;bl - al 
              JAE next          ;针对无符号数时:高于等于转移到next处执行
              mov bl,al         
              next:           ;这个next是标号,可以随意写
                   inc si     ;如果JAE next没有被执行,但是这个next依然会被按照顺序执行一次,这一点很重要!!
            loop s    ;loop语句结束,循环几次是由cx来决定的
            mov max,bl
             hlt 		;停止运行
code ends
end run     

END
祝大家学习愉快!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ho_Yim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值