Java教程

汇编语言及应用——程序设计

本文主要是介绍汇编语言及应用——程序设计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、 建立汇编语言源程序.ASM

建立好的源文件以 EX_1.ASM 为文件名存盘
运行程序,显示如下:
在这里插入图片描述
调试程序,用e命令更改第二个字符串内容,再用G命令运行程序,结果输出:MATCH!
如下图所示:
在这里插入图片描述
2、完成课堂例题,并用 DEBUG 运行,观察结果。

data segment 
X db 6 
Y db ? 
data ends 
code segment 
assume cs:code,ds:data 
start::
 mov ax,data
 mov ds,ax
 mov al,x
 mov y,5
 add y,al
mov ah,4ch
int 21h
 code ends
end start

提示:运行以上程序,进入调试窗口, 用 U 命令显示程序,找到程序结束处的地址,用 G
命令执行程序,用 D 命令检查数据段中的运行结果。
在这里插入图片描述
X db 6 //X初始值为6
Y db ? //Y初始值为?
mov al,x //将X的值,即6传递给AL
mov y,5 //将5传递给y
add y,al //将y与al的值两者相加后,即B传给y
mov ah,4ch //将4C传给AX的高八位,所以最后AX的值由4C和06组成,即4C06
在这里插入图片描述
在这里插入图片描述

2、学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。

示 例
源程序如下:

data segment
   a  db  10      db一个字节   dw两个字节,一个字
   b  db  20
   c  db  30,40,50     //变量名对应了偏移地址,即a,b,c,c+1,c+2
data  ends
code  segment
     assume  cs:code,ds:data
start:
       mov ax,data
       mov ds,ax   //把data段的首地址送给ds
       mov al,c+1  //把c+1字节地址单元的内容(就是40)送给al,直接寻址
       add al,c   //实现了c和c+1的求和,即70,放在al中
       mov a,al     //把计算结果al里面的东西拿出来,放在a中,a=70,即46H
       mov al,c+1
       add al,c+2  实现了c+1和c+2的求和,即90,放在al中
       mov b,al   把计算结果al里面的东西拿出来,放在b中,b=90,即5AH
       add c,10   //c里面的数+10,送在c中,c=40  即28H
       add c+1,20   //c+1里面的数+20,送在c+1中,c+1=60  即3cH
       add c+2,30    //c+2里面的数+23,送在c+2中,c+2=80  即50H
exit:  mov ah,4ch
       int 21h   //退出程序
code ends
       end start

阅读程序,试问程序执行到exit时,字单元A、B、C、C+1、C+2中的内容各是什么?
在这里插入图片描述
字节单元:46 5A 28 3C 50
字单元:5A46 285A 3C28 503C 0050

1、 通过debug命令将上面的程序写入内存,追条执行,根据指令执行后的实际运行情况填空。

MOV AX,0FFFFH
	MOV DS,AX

	MOV AX,2200
	MOV SS,AX
	
	MOV SP,0100
	
	MOV AX,[0]        ; AX=C0EA
	ADD AX,[2]         ;AX=C0FC
	MOV BX,[4]        ;BX=30F0
	ADD BX,[6]         ;BX=6021
	
	PUSH AX       ;SP=00FE ; 修改的内存单元的地址是2200:00FE,内容为C0FC
	PUSH BX       ;SP=00FC ; 修改的内存单元的地址是2200:00FC,内容为6021
	POP AX        ;SP=00FE ; AX=6021
	POP BX        ;SP=0100 ; BX=C0FC
	
	PUSH [4]       ;SP=00FE ; 修改的内存单元的地址是2200:00FE,内容为30F0
	PUSH [6]       ;SP=00FC ; 修改的内存单元的地址是2200:00FC,内容为2F31

2、 x、y、z 均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,编程实现 x + y + 24 - z → w ,并用W, W+2单元存放w.

假设x,y,z为0101,0202,0303
程序如下:

data segment
    X dw 01,01
Y dw 02,02
Z dw 03,03
W dw ?,?
data  ends
code  segment
     assume  cs:code,ds:data
start:
       mov ax,data
       mov ds,ax
       mov ax,X
       mov dx,X+2
           add ax,Y
           adc dx,Y+2
       add ax,24    
       adc dx,0
       sub ax,Z       
           sbb dx,Z+2
           mov W,ax     
       mov W+2,dx
exit:  mov ah,4ch
       int 21h
code ends
       end start

调试截图:
在这里插入图片描述
所以W=ax=4C18,W+2=dx=0000

3、 将下面程序补充完整,保存成.asm文件,将其生产可执行文件,运行后观测AX寄存器种的内容是什么。

data segment
   TABLE  dw  10,20,30,40,50
   ENTRY  dw  3
data  ends
code  segment
     assume  cs:code,ds:data
start:
       mov ax,data
       mov ds,ax
       mov BX,OFFSET TABLE
       add BX,ENTRY
exit:  mov ah,4ch
       int 21h
code ends
       end start

在这里插入图片描述
运行后观测AX寄存器中的内容是:4C70

这篇关于汇编语言及应用——程序设计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!