前言
作为一名在校大学生,我将近期所学的知识进行总结。
一年之后我再看这些代码,我发现这些代码对于初学者十分友好。因此,我将这些代码分享给大家,希望大家能有所收获。如有不足,欢迎交流。
推荐可以看这位B站up主的视频学习汇编
B站up主
提示:以下是本篇文章正文内容,下面案例可供参考
一、拆字程序
题目要求
例如:单元data的内容为27H,将其高、低两位拆出后,分别存放到dataH和dataL中。编写程序,执行后,dataL 的内容应为低位07H,dataH的内容应为高位02H。
程序代码和运行结果
1.1代码如下(示例):
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
var DB 27H
varL DB 00H
varH DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,var ;取变量的低4位
AND AL,0FH
MOV varL,AL
MOV AH,var ;取变量的高四位
AND AH,0F0H ;不能以字母直接开头,要加0
SHR AH,4 ;右移四位,不然 varH 就变成02H
MOV varH,AH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.1运行结果
二、拼字程序
题目要求
例如:将两个地址单元dataH和dataL中存放的数字,理解为一个两位16进制数的高、低
位,通过拼字,将其组装为一个数。并存入data中。
dataL的内容为低位07H,dataH的内容为高位02H,单元data用于存放拼字的结果,编程执行效果,应在data单元中存储数据27H。
程序代码和运行结果
1.2程序代码
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
varL DB 07H
varH DB 02H
var DB 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,varL
MOV var,AL ;将低位数据的值赋值var
MOV AL,varH ;将高位数据的值赋值var
SHL AL,4 ;将低四位数字移到高四位
ADD var,AL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.2运行截图
三、计算表达式
题目要求
编写程序实现 W=((B1+B2-B3)/B4*B5)2 , Bi为字节型变量,W为双字变量,不考虑溢出问题。
程序代码和运行结果
1.3程序代码
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
B1 DB 12H
B2 DB 1CH
B3 DB 1FH
B4 DB 03H
B5 DB 4AH
W DD ? ;题目要改成双字
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,B1
ADD AL,B2
SUB AL,B3 ;AL=B1+B2-B3
XOR AH,AH ;AH清0 因为被除数要放入AH中
DIV B4 ;默认被除数是在AX当中的
;除数在B4 结果:商在AL 余数在AH中
MUL B5 ;字节*字节 == 字
;结果为字 就要按照字的乘法进行处理
MUL AX ;( (B1+B2-B3) /B4*B5 )^2
MOV W,AX ;存放低字节
MOV W+2,,DX ;存放高字节
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.3运行结果
四、计算表达式
题目要求
已知当前数据段中有一个十进制数字0-9的7段代码表,其数值分别为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H,要求利用XLAT指令,将十进制数字57转换成相应的7段代码值,存到BX寄存器中,写出响应的程序段。
程序代码和运行结果
1.4程序代码文章来源:https://www.toymoban.com/news/detail-742277.html
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
table DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18H
var DB 57H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,var
AND AL,0F0H
SHR AL,4
MOV BX,OFFSET table
XLAT ;查找高四位
MOV DH,AL ;将高四位赋值到DH中
MOV AL,var
AND AL,0FH
XLAT ;查找低四位
MOV DL,AL ;将低四位赋值到DL中
MOV BX,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.4运行结果
文章来源地址https://www.toymoban.com/news/detail-742277.html
到了这里,关于微机实验第一章:汇编程序的建立和简单的顺序结构汇编程序设计(B站)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!