导航:首页 > 编程知识 > 编程中lodsb什么意思

编程中lodsb什么意思

发布时间:2024-11-13 12:38:34

『壹』 汇编编程 2位十进制数的四则运算

; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
ASCII_Binary MACRO ;将两位数字的ASCII码转换成二进制数
mov dl,10
lodsb
and al,0fh
mul dl
mov dx,ax
lodsb
and al,0fh
add al,dl
stosb
EndM
; -------------------------------------
; 功能:输入两位十进制数,将其保存在指定的内存单元
; 入口:es:di=保存输入的数字首地址
; 出口:转换后的二进制数保存在di所指的单元
Input_Dec Proc Near
push cx
push bx
cld
mov cx,2
@@Input_Dec: mov ah,7 ;从键盘接受一个字符
int 21h
cmp al,'0'
jb @@Input_Dec ;若低于数字'0',重新输入
cmp al,'9'
ja @@Input_Dec ;若高于数字'9',重新输入
stosb ;保存
mov ah,0eh ;显示这个数字
xor bh,bh
int 10h
loop @@Input_Dec ;接受下一个数字
pop bx
pop cx
ret
Input_Dec EndP
; -------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Unsi_Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[5]
mov BYTE PTR [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,ax
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 6 p(?)
Unsi_Dec_ASCII EndP
; -------------------------------------
; 功能:键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回
; 入口:无
; 出口:若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。
Yes_or_No proc Near
push dx
push ax
@@Input_Chr: mov ah,7 ;不带回显的键盘输入
int 21h
mov dl,al
and al,0dfh
cmp al,'Y'
jnz $+5
stc
jmp $+7
cmp al,'N'
jnz @@Input_Chr
clc
mov ah,2
int 21h
pop ax
pop dx
ret
Yes_or_No Endp
; -------------------------------------
; 加法运算
Addition Proc Near
mov ax,WORD ptr Number
add al,ah
xor ah,ah
call Unsi_Dec_ASCII ;显示和
ret
Addition EndP
; -------------------------------------
; 减法运算
Subtration Proc Near
mov ax,WORD ptr Number
sub al,ah
xor ah,ah
call Unsi_Dec_ASCII ;显示差
ret
Subtration EndP
; -------------------------------------
; 乘法运算
Multiple Proc Near
mov ax,WORD ptr Number
mul ah
call Unsi_Dec_ASCII ;显示乘积
ret
Multiple EndP
; -------------------------------------
; 除法运算
Division Proc Near
mov ax,WORD ptr Number
mov bl,ah
xor ah,ah
div bl
push ax
xor ah,ah
call Unsi_Dec_ASCII ;显示商数的整数部分
mov cx,6 ;写字符次数
mov al,'.'
mov ah,0eh
@@Write_Dot: int 10h
loop @@Write_Dot
pop ax
xchg ah,al
or al,30h
mov ah,0eh
int 10h
ret
Division EndP
; -------------------------------------
prompt_Str db 13,10,10,'Please input an arithmetical expression:',13,10,'$'
Contin_Str db 13,10,10,'Continue(Y/N)?$'
Number db ?,? ;操作数存储单元
Operators db '+-*/' ;运算符
Procere dw Addition,Subtration,Multiple,Division
Press_Key db 7,13,10,10,'The complated. Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es
Input_Expre: Output prompt_Str ;提示输入算术表达式
lea di,Arith_Expre ;算术表达式缓冲区地址
call Input_Dec ;输入两位十进制数,将其保存在指定的内存单元
Input_Oper: mov ah,7
int 21h
cmp al,'+'
jz Store_Oper
cmp al,'-'
jz Store_Oper
cmp al,'*'
jz Store_Oper
cmp al,'/'
jnz Input_Oper
Store_Oper: stosb ;保存
mov ah,0eh ;显示这个数字
xor bh,bh
int 10h
call Input_Dec
mov al,'='
mov ah,0eh
xor bh,bh
int 10h
lea si,Arith_Expre
lea di,Number ;操作数存储单元地址
ASCII_Binary ;将两位数字的ASCII码转换成二进制数
inc si
ASCII_Binary
mov al,BYTE ptr Arith_Expre[2] ;取运算符
mov cx,4
lea di,Operators
mov bx,di
repnz scasb
xchg di,bx
sub bx,di
dec bx
shl bx,1
call Procere[bx] ;调用相应的运算子程序
Output Contin_Str
call Yes_or_No
jc Input_Expre
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Arith_Expre: ;算术表达式缓冲区
Code ENDS
END Start ;编译到此结束

『贰』 编写程序实现在内存地址3000H:0100H~0200H范围内查找字符“#”,若找到,则在

这个问题需要根据具体的开发环境和编程语言来确定,下面提供一种基于汇编语言的实现方案。

首先,我们需要访问内存地址3000H:0100H~0200H范围内的数据。假设我们的程序运行在实模式下,可以使用寄存器ES存储目标段地址3000H。然后,我们使用寄存器DI存储偏移地址0100H,将ES:DI指向数据的起始地址。

接下来,我们需要查找字符“#”。可以使用循环结构逐个比较每个字节的值,找到字符“#”时跳转到相应的处理代码。具体实现代码如下:

以上代码使用LODSB指令按字节读取数据,并使用CMP指令比较字节的值,根据比较结果跳转到相应的处理代码。如果找到字符“#”后,可以在HANDLECHAR代码中添加相应的处理逻辑。如果未找到,可以在NOTFOUND代码中添加相应的处理逻辑。

阅读全文

与编程中lodsb什么意思相关的资料

热点内容
联系服务器默认密码 浏览:980
chm文件怎么转换成pdf 浏览:988
javasetup6u22exe 浏览:692
win10rdpusb重定向 浏览:183
邮箱怎么传送文件夹吗 浏览:518
苹果app怎么恢复购买 浏览:929
联想光盘驱动程序下载 浏览:151
文件管理器一次分享多个图片 浏览:819
管家婆销售单样式默认哪个文件夹 浏览:2
为什么待机时数据网络断开 浏览:161
文件继承文件夹权限 浏览:652
vegaspro12视频教程 浏览:520
编程学什么语言好写 浏览:534
网络配置器怎么设置 浏览:827
修改手机相册图片文件名 浏览:829
macbookair安装win10 浏览:808
电脑拔出u盘怎么保存文件 浏览:832
手机号被注册过微信 浏览:211
手机电脑下载的文件在哪里 浏览:945
linux反三角函数bc 浏览:477

友情链接