文章目录
- 前言
- 例1 :求AX和BX寄存器中两个无符号数之差的绝对值,结果放在RESULT单元
- 例2 :设内存中有三个互不相等的有符号字数据,分别存放在X、Y、Z字单元中, 编程将其中最小值存入MIN单元。
- 例3:将键盘输入的小写字母转化为大写字母并显示出来
- 例4:编写一段程序,计算下列函数值。X,Y是有符号字变量。![请添加图片描述](https://img-blog.csdnimg.cn/5255fce7895b46ac8e27aeb2fbd67fc3.png)
- 例5:设内存单元DATA存放一字节无符号数,编程将其拆成二个一位十六进制数,HEX单元存放低位十六进制数,HEX+1单元存放高位十六进制数。
前言
作为一名在校大学生,我将近期所学的知识进行总结。如有不足,欢迎交流。
提示:以下是本篇文章正文内容,下面案例可供参考
例1 :求AX和BX寄存器中两个无符号数之差的绝对值,结果放在RESULT单元
实现代码
代码如下(示例):
; multi-segment executable file template.
data segment
result DW 0
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov bx,1234H
mov ax,0cd34H
cmp ax,bx ;结果不返回按下,只影响Flag
jae adyb;ax >= bx ,执行ax - bx
sub bx,ax ;bx > ax 执行bx -= ax
mov result,bx
jmp js
adyb: sub ax,bx ;结果在AX中
mov result,ax
js: mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
例2 :设内存中有三个互不相等的有符号字数据,分别存放在X、Y、Z字单元中, 编程将其中最小值存入MIN单元。
实现代码
; multi-segment executable file template.
data segment
x DW 1213H ;可以自行设置X、Y、Z的值
y DW 0cd54H
z DW 1211H
min DW 0
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;注意mins不是分钟(我百度了一下,minutes和mins长的也挺像的),本人英语不太行,希望理解。 mins代表最小数
mov ax,x ;假设x为当前最小值
cmp ax,y
JL axyb ;ax小于bx
mov ax,y ;y更小
cmp ax,z
JL mins ;y<z,且y<x,因此y最小
;否则
mov ax,z ;将z赋值给ax
JL mins ;跳转到mins
axyb:cmp ax,z
JL mins ;最小值是x
;否则
mov ax,z ;最小值是z
mins:mov min,ax;ax最小
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
例3:将键盘输入的小写字母转化为大写字母并显示出来
实现代码
; multi-segment executable file template.
data segment
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov AH,1
INT 21H
cmp AL,'a'
JB stop
cmp AL,'z'
JA stop
mov BL,AL
SUB BL,20H
mov AH,2
INT 21H
stop: mov ax, 4c00h ; exit to operating system.
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
例4:编写一段程序,计算下列函数值。X,Y是有符号字变量。![请添加图片描述](https://img-blog.csdnimg.cn/5255fce7895b46ac8e27aeb2fbd67fc3.png)
实现代码
; multi-segment executable file template.
data segment
X DW 234 ;这里可以改变X的大小
Y DW ?
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ax,X
cmp ax,0
jge case23 ;当x大于等于0
add ax,10 ;当x小于0
jmp bcjg;
case23:cmp ax,10
jg case3 ;X大于10
mov bx,30
mul bx
jmp bcjg
case3:sub ax,190
bcjg:mov y,ax
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
例5:设内存单元DATA存放一字节无符号数,编程将其拆成二个一位十六进制数,HEX单元存放低位十六进制数,HEX+1单元存放高位十六进制数。
实现代码
; multi-segment executable file template.
data segment
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
MOV AH,1
INT 21H
CMP AL,1BH
JZ LP_END ;输入的是ESC,程序退出
CMP AL,41H
JC output ;字母不变去显示
CMP AL,5CH
JNC output ;字母不是大写字母
ADD AL,20H ;给字母是大写,所以要先增肥
JMP output ;增肥后去显示
output:MOV DL,AL
MOV AH,2
INT 21H
LP_END:mov ax, 4c00h ; exit to operating system.
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.