汇编语言写出的helloworld运行过程

时间:2021-09-13 01:25:51

一:首先说一点,这篇文章建立在懂一点汇编的基础上,有几个简单的命令,说以下:

    1:-r命令

-r 查看寄存器

        -r 寄存器 (如 -r AX) 修改寄存器的值;

   2:-d命令

-d 地址:xxxx:xx (如 -d 1000:0)从1000段地址,0号偏译地址开始的128个字节的内存数据,接着-d是接下来的128个字节;

        -d 地址:xxxx:xx xx (如 -d 1000:0 f)查询1000:0-1000:f的内存单元;

   3:-e 命令:

-e 地址:xxxx:xx [data] [data].... (如 -e 1000:0 1 2 3 4 5 6 7 8 9 a b c d e f )表示在内存单元1000:0开始的地址写入数据0,1000:1写入数据1,...1000:f写入数据f

-e地址:xxxx:xx (如:-e 1000:0)表示自动一个一个输入值,输入完成时按回车退出;

   4:-u命令:表示接下来执行的命令

-u 地址:xxxx:xx在某内存查看命令 (如-u 1000:0)

    注: 如在1000:0 写入-e 1000:0 e5 d8;

     -u 1000:0就可以查看写入的命令

    5:-t命令

-t 执行 -u中的命令,必须保证CS,IP寄存器的值CS=1000,IP=0,如果不是这样,用-r 寄存器改变;

    6:-a 用汇编指令写入数据

-a 地址:xxxx:xx(如-a 1000:0 mov ax,1),可以用-t命令执行!

二:(如果你是64位机的话,32位不用,可是直接在dos下) 接下来,必须有的几个工具,

DOSBox.exe ,masm.exe,link.exe,debug;

将这几个工具放入一个目录下 (如:E:\),运行DOSBox.exe,输入mount c: E:\

接下来将写的汇编文件放入E:\,既和那些工具放在一起

接下来输入:c:

接下来输入:masm.exe

接下来输入:hw.txt;()  (这个是一个.txt文件,存放的汇编代码,注意,文件名不要太长,否则会失败!)

成功后如图,同时在E:\ 会生成一个hw.obj文件

汇编语言写出的helloworld运行过程

 

接下来输入:link.exe

接下来输入:hw.obj;

结果如图:同时在E:\会生成一个hw.exe可执行文件

汇编语言写出的helloworld运行过程

接下来输入:cls

接下来输入:hw.exe就可以出现helloworld了!

如图:

汇编语言写出的helloworld运行过程汇编语言写出的helloworld运行过程

 

三:hw.txt文件源代码:

                         ASSUME CS:CODE,DS:DATA
                         DATA SEGMENT
                         DB "HELLO WORLD" ;存储要显示的数据
                         DATA ENDS

                         CODE SEGMENT
                         START:
                          MOV AX,0B800H ;显存的段地址
                         MOV ES,AX ;es做显存段地址
                         MOV AX,DATA ;把标记data的地址给ax
                         MOV DS,AX ;ds存储data的段地址
                         MOV BX,0 ;bx置零,用作数据段的寻址
                         MOV DI,0 ;di用于显存的寻址
                         MOV CX,11 ;循环11次,因为hello world有11个字符
                         ;以下为显示过程
                         S:
                         MOV AL,[BX] ;把bx指向的内存单元中的数据给al
                         MOV AH,2 ;设置绿色字体
                         MOV ES:[DI],AX ;送入显存
                         INC BX ;bx+1
                         ADD DI,2 ;di+2
                         LOOP S ;循环执行S

                         MOV AH,1
                         INT 21H ;调用中断暂停,等待键盘输入一个字节
                         MOV AX,4C00H
                         INT 21H ;调用中断退出程序
                         CODE ENDS
                         END START