汇编与接口-部分答案

本文档详细介绍了多个汇编语言编程题目,涵盖了分支程序设计、循环程序设计、子程序结构等核心概念。内容包括小写转大写、正负数比较、字符串数字检测、冒泡排序等实际问题的解决方案,所有代码都在DEBUG环境中进行了调试。
摘要由CSDN通过智能技术生成

因为这些题目是我自己写的,可能会有一些错误,希望不要嫌弃

在这里插入图片描述

分支程序设计

小写转换为大写

问题描述
1、内存有一个字节变量VAL中存放着小写字符’a’,请将该字符转换为大写字符并在屏幕中显示出来(要求在debug中调试出该程序)。

代码实现

assume cs:code
data segment
VAL  db 'a'
data ends
code segment
start: mov ax,data
       mov ds,ax
	   mov si,offset VAL
	   mov al,ds:[si]
	   and al,11011111b
	   mov dl,al
	   mov al,0
	   mov ah,02h
	   int 21h
	   mov ax,4c00h
	   int 21h
code ends
end start

正数负数分别存放

问题描述
2、设存储单元A和B各有一带符号字节数,比较大小和正负,要求将较大数送RES1单元;如果有负数,将一个负数送RES2,否则RES2送-1(要求在debug中调试出该程序)。

代码实现

assume cs:code
data segment
A db -7
B db 10
RES1 db ?;占位
RES2 db ?
data ends
stack segment;设立一个堆栈
db 16 dup(0)
stack ends
code segment
start: mov ax,data
       mov ds,ax
	   mov ax,stack
	   mov ss,ax
	   mov sp,16
	   lea si,A;把A的偏移地址给si
	   mov al,ds:[si];把A中的数值送到寄存器al中
	   lea si,B
	   mov bl,ds:[si]
	   cmp al,bl
	   jl n1;如果al中的数值小于bl中的数值,跳转到n1
	   cmp al,bl
	   jg n2;如果al中的数值大于bl中的数值,跳转到n2
	   cmp al,bl
	   je n1
n1:    lea si,RES1
       mov ds:[si],bl;因为bl中的值大,所以将值送人RES1中
	   jmp next;跳转
n2:    lea si,RES1
       mov ds:[si],al
	   jmp next
next:  lea si,RES2;将RES2的偏移地址送入si中
       push ax;因为下面要改变ax的值,所以先把值压入栈中
       shl al,1;左移一位,到标志寄存器CF中
       jnc  next1;CF=0,如果为零,表示该值为正,跳转到next1段
	   pop ax;为不为零,表示为负,把ax寄存器中的数送人到RES2中
	   mov ds:[si],al
	   jmp exit
next1: push bx
       shl bl,1
       jnc next2;表示al和bl中的值都为正数,跳转到next2中
	   pop bx
	   mov ds:[si],bl
	   jmp exit
next2: mov al,-1
       mov ds:[si],al;RES2送-1
       jmp exit
exit:  mov ax,4c00h
	   int 21h
code ends
end start

循环程序设计

测试字符串中是否有数字

问题描述
1、在STR到STR+99单元中存放着一个字符串,试编写程序测试该字符串中是否有数字,若有将CL置1,否则CL置0 (要求在debug中调试出该程序)

代码实现

assume cs:code
data segment
STR db 'pbcdefghij'
	db 'klmnujnhbn'
	db 'olknhbgvfc'
	db 'olokinujm9'
	db 'olkjngvdfc'
	db 'plplplplpi'
	db 'jkjkjkjkjk'
	db 'tgtgtgtgtg'
	db 'tvtvtvtvtv'
	db 'ybybybybyp'
Count equ $-STR
r db ?
data ends
code segment
start: mov ax,data
       mov ds,ax
	   mov cx,Count;可能会没输够100个数,所以在这里用了字符串的长度
	   lea si,STR;STR为偏移地址
s:     cmp byte ptr d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学无止境****

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

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

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

打赏作者

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

抵扣说明:

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

余额充值