汇编语言中的start有什么用

一 START END

开头有个START
结尾有个END

1.汇编语言中的start有什么用?

start就是一个标号,标志程序的入口而已,程序加载到内存之后CS:IP会指向这个标号,从START指向的指令开始运行
这个标号不一定是START,你也可以用MAIN,但在程序的最后要用END MAIN来提示程序结束
START也不一定在代码段的最前面,它的前面是可以有指令或数据的
例子(没有用start,用了main)(在代码段里放置变量是十分不规范的,这里只是为了举例):
assume cs:code
code segment
a db 0
b db 0
main:
mov ax,0
mov ax,4C00H
int 21H
code ends
end main

当然,start和main在汇编代码中也可以同时存在,看具体的需要而定。

2.汇编语言中START和MAIN有区别么?

没有区别,都是标号。叫什么都行
start: 作为汇编程序的一个标号,定义了程序的入口,既程序从start:处开始执行。
若程序的第一条指令就是程序的入口,则start可以缺省。

start 使用结构如下:
start: \可以定义程序的入口 ,也可以仅仅作为一个标号来用

end start \定义程序段结束 (作为标号时,可以没有对应的end start)
其中 start 可以用其他字符代替,但是对应的end start 中的start也必须用同字符代替。
若第一个start缺省,则end start中的 start 也必须去掉。
········································································································
最后到底是end start还是end main,要看程序中的汇编指令倒底是从哪儿开始执行的,一般看assume伪指令下面的一行的main:还是start:就可以。

二 例题

2.1 求出首地址为 DATA 的 100D 字数组中的最小偶数

;15、试编写一个汇编语言程序,求出首地址为 DATA 的 100D 字数组中的最小偶数,并把它存放在 AX 中。
.model small
.data
    data dw 10,9,8,7,6,5,4,3,2,1,90 dup(60)
.code
    start:
    mov ax,@data
    mov ds,ax
        
        call mineven

    mov ah,4ch
    int 21h

    mineven proc
        push bx
        push cx
        push dx
        push si


        mov bx,offset data
        mov si,0
        mov cx,100
        mov ax,[bx][si]

        checker:
            mov dx,[bx][si]
            test dx,1b
            jnz continue;check if even

            cmp ax,dx
            jle continue

            mov ax,dx

            continue:
            add si,2
        loop checker

        pop si
        pop dx
        pop cx
        pop bx

        ret
    mineven endp
end start

2.2 汇编统计非数字字符

;19、从键盘输入一系列以 $ 为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
.model small
.data
    strings db '1234fdsa56fdsafdsa7fdsa890$'
.code
    start:
        mov ax,@data
        mov ds,ax

        call counter

        mov ah,4ch
        int 21h

        counter proc

            push ax
            push bx
            push dx
            push si

            mov bx,offset strings
            mov si,0

            mov ax,0

            startcount:
                mov dl,[bx][si]
                cmp dl, '0'
                jl nextloop
                cmp dl,'9'
                jg nextloop
                inc ax

                nextloop:
                cmp dl,'$'
                je display
                inc si
            jmp startcount
            
            display:
                mov dx,10
                div dl
                add al,'0'
                add ah,'0'
                push ax
                mov dl,al
                mov ah,02h
                int 21h
                pop ax
                mov dl,ah
                mov ah,02h
                int 21h
            
            pop si
            pop dx
            pop bx
            pop ax
            ret
        counter endp
    end start
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

「已注销」

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

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

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

打赏作者

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

抵扣说明:

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

余额充值